항해가 끝나고 몇 번의 면접을 끝내고 개강을 하니 지쳐서 일주일 정도 쉬려고 했는데.. 일주일이 이주일이 되고... 이제 거의 3주가 다 되어 가는데, 이제부터 꾸준히 TIL 작성, 커밋, 면접 예상 질문들을 정리해보려고 한다. 개강과 함께 정신 좀 차렸으면 좋겠다.. 내 자신 1. JPA는 무엇인가?✅ RDBMS(관계형 데이터 베이스)와 OOP(객체 지향 프로그래밍) 객체 사이의 불일치를 해결하기 위한 ORM(Object-Relational Mapping) 기술. ORM 기술을 구현하기 위해 사용된 것이 Hibernate이고, 이러한 ORM 기술 프레임 워크의 표준화의 결과로 만들어진 것이 JPA이다. JPA를 이용하면 개발자가 직접 DB를 작성하지 않고 JPA API를 통해 데이터 베이스를 저장, 관..
발제에서는 미니 프로젝트라 긴장하지 말고 쉬엄쉬엄 하라다던데 다들 잘하시고 욕심이 있으신 분들이다보니 결국 프로젝트 하는 기간에는 2시 넘어서 잤던 것 같다. 프론트와 협업을 하면서 문제가 있었던게 로컬환경과 배포 환경이 다르다보니 문제가 발생한 구간을 찾는 게 정말 힘들었다. 프론트와의 커뮤니케이션도 중요했지만 백앤드 사이에서의 커뮤니케이션도 중요하다고 생각했다. 프로젝트를 하면서 첫 번째 닥친 문제가 로컬 환경에서는 로그인이 되는데 프론트와 연결을 하려다보니 로그인이 전혀 안되는 문제였다. 이는 Spring 쪽에서 Spring Security가 기본적으로 제공하는 세션을 사용했던 것과 .formLogin()을 사용해 로그인을 시도했다는 점이었다. Spring Security CORS 설정 @Bean ..
순환 참조를 방지하기 위한 방법은 여러 가지가 있다. 1. @JsonIgnore : 이 어노테이션을 붙이면 JSON 데이터에 해당 프로퍼티는 null로 들어가게 된다. 즉, 데이터에 아예 포함시키지 않는다. 2. @JsonManagedReference 와 @JsonBackReference : 부모 클래스(Posts entity)의 Comment 필드에 @JsonManagedReference를, 자식 클래스(Comment entity)의 Posts 필드에 @JsonBackReference를 추가해주면 순환 참조를 막을 수 있다. 3.@JsonIgnoreProperties : 부모 클래스(Posts entity)의 Comment 필드에 @JsonIgnoreProperties({"posts"}) 를 붙여주면 ..
객체의 양방향 관계 객체의 양방향 관계는 사실 양방향 관계가 아니라 서로 다른 단방향 관계 2개다. 객체를 양방향으로 참조하려면 단방향 연관관계를 2개 만들어야한다. 연관관계의 주인(Owner) 양방향 매핑 규칙 객체의 두 관계중 하나를 연관관계의 주인으로 지정 연관관계의 주인만이 외래키를 관리(등록, 수정) 주인이 아닌 쪽은 읽기만 가능 주인은 mappedBy 속성 사용하지 않음 주인이 아니면 mappedBy 속성으로 주인 지정 누구를 주인으로? 외래 키가 있는 곳을 주인으로 정해라. Entity의 관계를 모두 단방향으로 설정한 후 필요할 때만 양방향 관계를 설정한다. 심화과제 테스트 코드 분석 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironme..
💡 ORM: Object-Relational Mapping Object: **"객체"**지향 언어 (자바, 파이썬) Relational: "관계형" 데이터베이스 (H2, MySQL) https://jeong-pro.tistory.com/195 @ControllerAdvice, @ExceptionHandler를 이용한 예외처리 분리, 통합하기(Spring에서 예외 관리하는 방법, 실 예외 처리 과정 프로그래밍에서 예외 처리는 아주 중요하면서도 아주 어렵다. 과하다할 만큼 상세하고 다양하게 예외를 잡아 처리해준다면, 클라이언트도 그렇고 서버도 그렇고 더 안정적인 프 jeong-pro.tistory.com 스프링에서 예외처리는 크게 3가지로 나눌 수 있다. 컨트롤러단에서 처리 Controller Level -..
개발자 테스트 장점 빠르고 정확한 테스트 가능 (예상 동작 VS 실제 동작) 테스트 자동화 가능 배포 절차 시 테스트 코드가 수행되어 동작 검증 리팩토링 후 기존 동작에 대한 보증수표!!! 단점 개발 시간이 오래 걸림 테스트 코드를 유지보수하는 비용 JUnit 을 이용한 단위 테스트 프로그램을 작은 단위로 쪼개서 각 단위가 정확하게 동작하는지 검사하고 이를 통해 문제 발생 시 정확하게 어느 부분이 잘못되었는지를 재빨리 확인할 수 있게 해준다. @PostMapping("/user/userinfo") @ResponseBody public UserInfoDto getUserInfo(@AuthenticationPrincipal UserDetailsImpl userDetails) { return new UserI..
@GetMapping("/posts/{id}") public String showPost(Model model, @PathVariable Long id, @AuthenticationPrincipal UserDetailsImpl userDetails){ Post post = postRepository.findById(id).orElseThrow( () -> new IllegalArgumentException("게시글을 찾을 수 없습니다.") ); model.addAttribute("username", userDetails.getUsername()); model.addAttribute("id", id); model.addAttribute("title", post.getTitle()); model.addAtt..