Java-Spring

· Java-Spring
들어가기프로젝트 팀원분께서 DTO클래스에 Record를 사용해보는게 어떻겠냐고 하셔서 바로 Record 클래스에대해 알아보기 시작했고, 과연 데이터를 실어 나르는데 적합한지 알아봤다. Record ClassJDK 14에서 미리보기형태로 등장한 Record 클래스는 JDK 16에 정식 스펙으로 등록됐다. 1. Final Class로 상속이 불가능하다.2. 불변객체이다 -> 모든 필드가 private final로 정의된다.3. 중복되는 코드들[Getter, Setter, HashCode, Equals 등] 컴파일 타임에 자동으로 생성된다. 한 마디로 코드가 깔끔해진다.public record UserSignUpRequest( @Size(min = 5, message = "아이디는 5자 이상이여야..
· Java-Spring
들어가기 테스트하기 쉽다고 좋은 함수, 좋은 설계는 아니지만 좋은 함수, 좋은 설계는 테스트하기 쉽다. 여기저기서 많이 들어볼 수 있는 말이다. 아직 테스트 코드를 많이 작성해보지 못했고 공부하는 과정이라 저 말이 잘 와닿지는 않는다. 아주 조금씩 이 말을 깨달아가고 있고 그 과정을 남겨보려 한다. 어려운 테스트, 좋지 못한 설계 진행 중인 프로젝트에서 회원의 관심분야를 등록, 수정, 삭제할 요구사항이 생겼다. 처음엔 아래와 같이 Service 레이어를 구현했다. @Transactional public void saveInterests(InterestsRequest interestsRequest, UserDetails userdetails) { User user = userRepository.findBy..
· Java-Spring
아래 코드를 한 번 살펴보자. Integer c = Integer.valueOf(127); Integer d = Integer.valueOf(127); System.out.println("c.hashCode() = " + c.hashCode()); System.out.println("d.hashCode() = " + d.hashCode()); System.out.println("System.identityHashCode(c) = " + System.identityHashCode(c)); System.out.println("System.identityHashCode(d) = " + System.identityHashCode(d)); System.out.println("(c==d) = " + (c==d));..
· Java-Spring
들어가기 우아한 객체지향을 듣고 느낀점만 많아서는 안되겠다는 생각이 들어 진행중인 프로젝트의 도메인 객체와 서비스 레이어를 유심히 살펴봤습니다. 도메인이 의존해서는 안될 코드를 하나 발견했고 이를 정리해보려 합니다. 도메인이 암호화를 책임지는 코드 아래는 회원을 관리하는 엔티티다. 도메인 객체에 passwordEncode 라는 메서드로 비밀번호를 암호화 하고있는데 처음엔 자신의 상태(password)는 자신이 변화시켜야한다고 생각했기에 도메인 내부에서 처리하고 있었습니다. @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class User { @Id @GeneratedValue(strategy = GenerationTyp..
· Java-Spring
들어가기 계층형 아키텍처에대해서 검색을 해보던 중에 이동욱 개발자님의 포스팅을 보게 됐다. 계층형 아키텍처 학교 다닐때 잠깐 JAVA 관련 수업을 들은적이 있다. 그때 수업 내용은 넷빈즈(Netbeans) IDE를 통해 JAVA로 윈도우 애플리케이션을 만드는 것이였다. 간단한 시간표 관리 프로그램을 만드는 과제는 얼 jojoldu.tistory.com 전체 글을 절반 쯤 읽던 중 Rich Domain Model에대한 이야기가 나왔고, 사실 처음 들어봤다... 그래서 글을 읽다 말고 1시간 40분 짜리 동영상을 시청하게됐다. 왜 이제서야 봤는지 후회가 될 정도였고 이 내용을 잘 정리해두려한다. eternity-oop - Overview eternity-oop has 4 repositories availab..
· Java-Spring
스프링을 사용하다 보면 @Value를 통해. yml 또는. properties에 정의된 속성을 가져오곤 합니다. 현재 진행중인 프로젝트에서도 @Value를 통해 jwt 설정을 가져와 사용 중입니다. public class JwtService { private static final String USER_UNIQUE_CLAIM = "user_unique_id"; private static final String ACCESS_TOKEN_SUBJECT = "AccessToken"; private static final String REFRESH_TOKEN_SUBJECT = "RefreshToken"; private static final String TOKEN_TYPE = "Bearer "; @Value("$..
· Java-Spring
들어가기 지난 포스팅에선 Http 요청 메세지의 가장 마지막에 EOF가 없어 bufferedReader.readline()이 무한 대기 상태에 빠졌었다. EOF는 클라이언트의 연결이 종료돼야 날아오기 때문에 EOF를 기준으로 body를 읽을 수 없었다. 대신 HttpHeader의 Content-Length를 이용해 body를 가져올 수 있다. HttpMessage의 Header를 파싱하자 BufferedReader에서 Header와 Body의 경계인 CRLF까지만 읽도록 한다. public class WebServer { //생략 private static final Map httpHeader = new HashMap(); //생략 } private static void parseHttpRequestHe..
· Java-Spring
들어가기 이번엔 클라이언트의 HTTP 메세지를 받아 서버측에서 출력해보자. HTTP 메세지를 BufferedReader로 출력하는 과정에서 Body를 출력하지 못하고 무한정 대기하는 상황이 있었다. 정리를 해보자. 클라이언트 HTTP 요청 클라이언트는 저번과 같이 http://localhost:8081 에서 기동중이다. 아래는 클라이언트 코드다. shot() { var dataToSend = 'Hello Server'; fetch('http://localhost:8080', { method: 'POST', headers: { 'Content-Type': 'text/plain', }, body: dataToSend, }) .then(function (response) { if (!response.ok) {..
H@eCh@n
'Java-Spring' 카테고리의 글 목록 (3 Page)