본문 바로가기

개발일지

(102)
[230709] Builder 패턴과 어노테이션 Builder 💬 자바 스프링에서 빌더 패턴이란 동일한 생성 방식으로 다양한 형태의 객체를 만들 수 있는 것을 말한다. 옵셔널 멤버 변수가 많은 경우 사용하면 좋은 디자인 패턴이라고 한다. ❓장점은 ✔ 생성자를 여러 개 만들 필요가 없다. 하나의 생성 방식으로 다양한 형태의 객체를 만들 수 있기 때문이다. ✔ 각 파라미터의 값을 명시적으로 넣어줄 수 있어 타입과 순서를 헷갈리는 일이 없다. Builder 직접 만들어보기 ✔ PostResponseDto 코드 @Getter public class PostResponseDto { private String title; private String writer; private String content; private LocalDateTime createdA..
[ 230709 ] 30주차 회고 일주일 간 진행한 내용 1. API 페어 프로그래밍 2. 다른 페어와 코드 리뷰 3. 사이드 프로젝트 논의 및 페어 프로그래밍 4. 주변 분들 도움주기 API 페어 프로그래밍 [진행] 숙련주차를 듣고 나서 Filter와 Jwt Token을 사용하여 인증 및 인가 기능을 추가했다. CRUD 작업도 몇몇 부분 수정을 했다. 이런 과정에서 비즈니스 로직, Entity 등이 수정이 되었다. 인증은 로그인 API로 처리를 하였으며 인가는 Filter에서 Jwt Token을 사용하여 처리를 했다. 이 부분은 내가 담당해서 코드를 작성했다. 그 이외 CRUD 작업은 팀원이 주도적으로 코드를 작성하셨다. [생각] 팀원과 함께 기존 코드에 기능 확장을 해보면서 많이 배울 수 있었다. 서로의 코드 짜는 방식이 다르기 때..
[230708] Json 변환시 Entity 순환 참조 문제 에러 ❗ Infinite recursion (StackOverflowError) com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) ✔ 에러 테스트 코드 @Test public void entityToJsonTest() throws JsonProcessingException { Post post = postRepository.findById(1L).orElseThrow( () -> new IllegalArgumentException() ); mapper.writeValueAsString(post); } 에러 이유 ❗ 양방향 연관관계가 있는 Entity가 Json 변환될 때 순환 참조가 일어나..
[230707] Git add할 때 CRSL 관련 에러 에러 내용 ❗ warning: in the working copy of 'team_stduy/Test2/gradlew.bat', CRLF will be replaced by LF the next time Git touches it 에러 원인 윈도우와 맥, 리눅스 사용자가 Git을 통해 협업을 할 때 발생하는 개행 관련 에러이다. 윈도우의 경우 개행은 CR(Carriage Return)과 LF(Line Feed)로 이루어져 있으며, 맥과 리눅스의 경우는 개행이 LF(Line Feed)로 이루어져 있다. 이것이 서로 다른 OS 간 협업을 하면서 혼합이 되기 때문에 생기는 것이다. 에러 해결 Git에서 이러한 문제를 해결하기 위해 자동으로 변환시켜 주는 기능을 제공한다. 그 기능은 Command 명령어를 통해..
[230706] String Constant Pool? String 생성 🎈상수 할당을 통한 생성 - String name = "jeong"; 🎈생성자를 통한 생성 - String name = new String("jeong"); String 저장되는 곳이 다름 💬 상수 할당을 통해서 String을 생성할 경우 String Constant Pool에 상수 값을 만들고 그 주소값을 사용합니다. 이후에 같은 값을 똑같이 할당할 경우 기존에 String Constant Pool에 만든 값을 사용합니다. 💬 생성자를 통해서 String을 생성할 경우 Heap 영역에 값을 저장하고 그 주소값을 사용합니다. 이후에 같은 값으로 생성자를 호출하더라도 Heap에 객체가 새롭게 하나 만들어집니다. 실제 코드 테스트 public void stringPoolTest(){ St..
[230705] 미니 프로젝트(230628) 코드 피드백 및 적용 피드백 받은 내용 🎈 첫 번째 피드백 ❗아래 코드에서 조건문의 경우 정규식에 포함시킬 수 있지 않을까요? private boolean validateUsername(String userName){ return userName.matches("[a-z0-9]+") && userName.length() >= 4 && userName.length() =8 && password.length()
[230704] 즉시 로딩과 지연 로딩? 즉시로딩 vs 지연로딩 ❓JPA에서 즉시 로딩이란? 💬 즉시 로딩이란 DB에서 데이터를 조회할 때 연관관계가 있는 데이터들도 가져오는 것입니다. ❓JPA에서 지연 로딩이란? 💬 지연 로딩은 DB에서 데이터를 조회할 때 연관관계가 있는 데이터들을 Proxy로 대체를 해둡니다. 그리고 실제로 사용할 때 데이터를 가져옵니다. ❓둘 중 어느 것이 Default로 설정이 되어있나요? ✅ ManyToOne, OneToOne 경우 Default는 즉시 로딩입니다. ManyToMany, ManyToOne 경우 Default는 지연 로딩입니다. public @interface ManyToOne { FetchType fetch() default FetchType.EAGER; } public @interface ..
[230703] JavaServlet에 대해 이해하기 내가 잘못 알고 있던 것 ❌ 오늘 Servlet를 자세히 알아보기 전까지 Servlet Container를 Servlet으로 잘못 알고 있었다. Dispacther Servlet에서 HttpServletRequest와 HttpServletResponse을 만들어준다고 생각했다. 이를 기반으로 Filter를 보다 보니 전체적인 흐름이 이해가 안 가기 시작했다. 내가 알게 된 것 ✅ Tomcat에는 Servlet Container가 있다. 그리고 요청을 받았을 때 HttpServletRequest와 HttpServletResponse을 만든다. 이후 Servlet 분석 후 찾은 Servlet을 init, service 메서드를 호출해 초기화 실행한다. 그리고 요청 메서드에 따라 doGet, doPost 등을..