본문 바로가기

JPA54

11. SAI(RestAPI) 사용 설명서 1. SAI는 어떻게 동작하나요? - SAI는 JWT를 기반으로 요청과 응답을 제공하는 RestAPI 서버입니다. - JWT는 회원가입, 일반 로그인에서 제공됩니다. a) Filter - 회원가입과 일반 로그인을 요청할 때에는 JWT를 기반한 검증을 수행하지 않습니다. - 그 외의 요청을 할 때에는 반드시 유효한 JWT를 쿠키로 보유하고 있어야 합니다. - 이 부분은 Filter를 이용하여 구현했습니다. - 아래의 코드는 JwtFilter 클래스의 한 부분입니다. @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException.. 2022. 9. 14.
10. 배포 완료 1. SAI의 RestAPI 서버를 소개합니다. https://restsai.herokuapp.com/sai-api Swagger UI restsai.herokuapp.com - 올해 6월에 시작하여, 4개월이 지난 오늘 드디어 프로젝트 SAI RestAPI 서버의 마침표를 찍었다. - 개발 기간은 4개월이지만, 여기까지 오는데 2년이 걸렸다. - 지난 2년 동안 매일을 실수하고 개선하고 실패하고 도전하고 배우고 연습하며 스스로의 멱살을 부여잡고 왔다. - 이전에 무언가 꾸준히 하는 것을 은은하게 달리는 것이라 표현했는데, 은은하기 보다는 꽤나 치열했다. - 이제 유종의 미를 거둘 시간이다. 좋은 결과가 있기를 바란다. 2022. 9. 14.
9. 개선사항(비즈니스 로직 제거, Exception Handler 적용, DataIntegrityViolationException 처리 방법) 0. 개요 - 우연한 기회로 SI 업체에 면접을 보러 가게 되었다. - 많은 기대는 하지 않았지만, 기대 이상으로 면접 경험이 좋았다. - 문답 형식의 이론 질문이 없었고 코드를 보여주고 해당 코드를 분석하는 방식의 면접이었다. - 확실히 다른 사람이 작성한 코드에서 그 맥락을 모른 체 문제점을 파악한다는 것은 아직은 쉽지 않다. - 면접에서 내가 작성한 사이(SAI)의 코드를 보면서 RestAPI, Java, Spring에 관련된 질문을 받았다. - 그 과정에서 몇 가지 프로젝트의 개선사항을 듣게 되었고 하나씩 개선해보았다. 1. 비즈니스 로직은 Service에서 처리하자. a) 고민은 개선의 시작 - 사실 SAI를 만들면서 방법론적인 고민을 많이 했다. - 그중 하나가 비즈니스 로직의 기준에 대한 고.. 2022. 9. 12.
7. 오류 해결 스토리 - constraint ["PUBLIC.UK_MBMCQELTY0"] 0. 문제 설명 a) 오류 소개 - Entity에 새로운 속성을 부여하기 위해서 코드 수정을 진행하고 있었다. - 새로운 속성을 이용한 쿼리를 테스트하는 과정에서 다음 오류가 발생했다. org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint ["PUBLIC.UK_MBMCQELTY0FBRVXP1Q58DN57T_INDEX_8 ON PUBLIC.MEMBER(EMAIL) VALUES 5"; SQL statement: insert into member (email, member_name, password, sign_up_date, visibility, member_id) val.. 2022. 7. 30.
6. 오류 해결 스토리 - Update/delete queries cannot be typed 0. 문제 설명 a) JPQL을 이용한 Update 쿼리 작성 - 회원 정보를 수정하기 위해서 다음과 같은 쿼리문을 작성했다. public int updateById(Long id, String name, String email, String password) { return em.createQuery("update Member as m " + "set m.name = :name, m.email = :email, m.password = :password where m.id = :id", Member.class) .setParameter("id", id) .setParameter("name", name) .setParameter("email", email) .setParameter("password", p.. 2022. 7. 30.
5. 오류 해결 스토리 - Join Table 접근과 영속 상태 0. 개요 - 프로젝트 사이의 백엔드를 개발하면서 겪은 다양한 문제의 발생 과정과 해결책을 찾아가는 사고 과정을 기록합니다. 1. 문제 설명 a) Entity 관계 - 프로젝트 사이는 3개의 Entity(Member, Event, Friend)로 구성된다. - Event와 Friend는 모두 Member_id를 외래 키로 사용한다. - 즉, Member를 기준으로 Event와 Friend 객체가 DB에 등록된다. - Event는 다수의 Friend 객체를 보유할 수 있고, Friend는 다수의 Event에 소속될 수 있다. - Event와 Friend는 ManyToMany의 관계를 가지며, 이는 Join Table 전략으로 관리한다. @Entity @Getter public class Event { @I.. 2022. 7. 27.
Query DSL이란? 0. 개요 - 이번 포스팅은 Query DSL에 대해서 간략하게 알아볼 예정이다. - JPA를 조금 더 효율적으로 사용하고 싶다면 Query DSL에 대해서 알아보자. http://querydsl.com/ 2022. 6. 8.
Spring Data JPA란? 0. 개요 - 이번 포스팅은 Spring Data JPA에 대해서 간략하게 알아볼 예정이다. - JPA를 조금 더 효율적으로 사용하고 싶다면 Spring Data JPA에 대해서 알아보자. https://spring.io/projects/spring-data-jpa Spring Data JPA Spring Data JPA, part of the larger Spring Data family, makes it easy to easily implement JPA based repositories. This module deals with enhanced support for JPA based data access layers. It makes it easier to build Spring-powered ap.. 2022. 6. 7.
OSIV(Open Session In View) 0. 개요 - 지금까지 JPA 기본 개념에 대해서 알아보았다. - 이번 포스팅은 JPA의 마지막 개념인 OSIV에 대해서 알아보자. 1. OSIV(Open Session In View) a) OSIV 란? - Open Session In View란, 하이버네이트 또는 JPA를 지칭하는 이름이다. - JPA는 Open Entity Manager In View이라 불리기도 하는데, 관례상 OSIV로 통일하여 부른다. b) OSIV 사용 설정 - JPA를 사용하면 Spring에서 기본적으로 spring.jpa.open-in-view의 옵션 값을 TRUE로 설정한다. - 이는 OSIV 옵션을 사용한다는 의미로, JPA 프로젝트 빌드 시점에 다음과 같은 warn 로그에서 확인할 수 있다. c) OSIV의 기능 -.. 2022. 6. 7.