programming study 74

JPA 기초지식

출처 - [Spring/JPA] JPA 기초지식 (tistory.com) 위 글은 김성렬 교수님의 KOCW강의를 보고 작성한 글로 자세한 내용은 해당 강의를 통해 확인하시길 권장합니다. http://www.kocw.net/home/cview.do?cid=5e6aec4a9ae2dd45 스프링과 JPA를 이용한 웹개발 본 강의는 JPA와 스프링프레임워크를 이용한 웹 개발 방법을 설명하고 있습니다. www.kocw.net Persistence.xml a box holding all the needed information for creating an EntityManagerFactory instance JPA 설정을 구별하는 구별자 일반적으로 연결한 데이터베이스당 하나의 영속성 유닛을 등록 실제 개발에서는 여..

Jackson으로 발생한 순환 참조 문제 해결(JPA Entity)

N:N 관계에서 직렬화를 하면 순환참조 하여 무한으로 getter가 호출되는 문제다. 해결책 일반적으로 @JsonIgnore를 이용해 해당 필드의 직렬화를 막거나, @JsonManagedReference - @JsonBackReference 쌍을 이용해 단방향으로만 직렬화가 가능하게 한다. 하지만 순환참조 없이 양뱡항 직렬화가 필요한 경우 @JsonIgnoreProperties을 사용한다. @JsonIgnoreProperties을 사용하면 직렬화 대상 필드에게 직렬화하지 않을 필드를 지정해 줄 수 있다. 예시 @RestController에서 Board를 조회하여 반환하면 Board 안의 Reply를 호출하고 또 Reply 안에 있는 Board가 호출 되고 이 과정이 무한적으로 반복 되는 순환참조가 발생한..

[Spring]RestTemplate과 HttpEntity (제네릭과ParameterizedTypeReference)

출처 : [Spring]RestTemplate과 HttpEntity가 뭐길래(제네릭과 ParameterizedTypeReference) - 야망찬 개발자의 블로그 (sowon-dev.github.io) [Spring]RestTemplate과 HttpEntity가 뭐길래(제네릭과 ParameterizedTypeReference) 프로젝트를 하다보면 화면이 아닌 서비스단에서 외부 API와 호출해야할 일들이 생긴다.이때 주로 사용되는 것이 RestTemplate이다. sowon-dev.github.io 프로젝트를 하다보면 화면이 아닌 서비스단에서 외부 API와 호출해야할 일들이 생긴다. 이때 주로 사용되는 것이 RestTemplate이다. 이번 프로젝트에서 백엔드 업무를 도맡았다. 첫 작업으로 맡게 된 건 외..

프로퍼티 파일(yml) 여러개 설정하기

출처 : [Spring Boot] 프로퍼티 파일(yml) 여러개 설정하기 (jiniworld.me) [Spring Boot] 프로퍼티 파일(yml) 여러개 설정하기 웹 애플리케이션의 실행 환경에 따른 구성설정의 외부화를 위해 프로퍼티 파일을 사용했습니다. spring boot에는 예약된 프로퍼티 키가 존재하며, 예약된 프로퍼티에 설정을 추가하는 것 만으로도 blog.jiniworld.me 선 결론 spring Boot 2.4 미만버전이라면 OS환경별로 다른 구성파일을 설정하고 싶다면 3.1 방법을 사용하면 되고, 웹 애플리케이션 시작시 커맨드 라인 인자값을 각기 다르게 설정하여 다양한 테스트를 하고 싶다면 3.2 방법을 사용하면 됩니다. 환경에 상관없이 고정적으로 여러개의 구성파일을 설정하고 싶다면 3...

jsp에서 yml, properties 파일 가져오기

출처 : Jsp에서 yml, properties 사용하기 (tistory.com) jsp에서 springboot에서 사용하는 설정파일 (application.yml, application.properties)의 값을 바로 가지고 올 수 있다. application.properties (or application.yml) 파일은 다음과 같이 정의가 되어 있는 상황이다. oing.daddy=cool guy 이 값을 jsp에서 바로 가지고 와서 사용하고 싶다. 가지고 오는 방법은 다음과 같다. 1. @environment.getProperty 를 통해 가져오는 방법 ${oingDaddy} 위와 같이 spring tag를 선언해주고 spring:eval 을 통해서 값을 가지고 올 수 있다. @environmen..

OAuth2.0

배경 개인 프로젝트에 OAuth 로그인 기능을 넣으려고 하는데, 먼저 OAuth의 개념을 확실히 하기 위해서 정리하였습니다. 본론 oauth란 다른 웹사이트에 자신의 정보에 대한 접근권한을 부여할 수 방법입니다. 예를 들면 특정 사이트에서 로그인을 할 때 네이버의 접근권한을 받아 인증을 하게 되는데 이 때 사용하는 인증절차를 oauth라고 합니다. 동작방식은 우선 자원을 제공하는 사이트에 클라이언트 즉 우리 어플리케이션주소와 redirect url을 등록하고cleint_id, cleint_secret를 발급받습니다. oauth 로그인을 할 때 먼저 cleint_id, scope, redirect_uri을 인자값으로 해서 자원을 제공하는 사이트의 리소스 서버로 요청을 합니다. 그러면 redirect url..

Springboot + JSP 프로젝트 jar로 배포하는 방법

출처 : Springboot + JSP 프로젝트 jar로 배포하는 방법 (tistory.com) Template Engine으로 JSP를 사용한 springboot 프로젝트가 있다. springboot에서 공식으로 지원을 하지 않는 Template Engine이다보니 JSP를 사용할때 여러가지 불편한 점들이 있다. 하지만 SI에서는 쉽게 기술을 휙휙 바꾸기 힘든 점들이 많다. SI는 참 힘들다... Springboot + JSP 프로젝트가 여러개 있고 이것을 각각 띄워서 사용을 할수도 있어야 하고 경우에 따라서는 여러개의 프로젝트가 main project에 dependency 형태로 붙을수도 있어야 한다. dependency 형태로 붙으려면 war가 아닌 jar 형식의 파일로 빌드가 되어야 한다. 이 방..

Spring Security 로그인 동작 흐름

요약 로그인 요청이 오면 필터가 가로채서 username,password를 확인하여 세션에 있는 SecurityContextHolder 안에 있는 SecurityContext에 Authentication 객체( user 오브젝트 역할) 를 저장한다. Authentication객체는 AuthenticationManager가 만들어준다. 자세한 과정 - username,password를 가지고 로그인 요청이 왔을 때 AuthenticationFilter가 가로채서 usernamePasswordAuthenticationToken을 만들어준다. - AuthenticationManager이 usernamePasswordAuthenticationToken을 받아서 Authentication ( session )을 ..

SpringBoot, JPA - '톰캣 시작' 및 'http request 요청' 흐름

1. 톰켓 시작 2. 필터, 디스패처, DataSource, 세션, 인터셉터, viewResolver 를 메모리에 띄운다 3. 서버에 http 요청이 오면 디스패처가 http 요청을 받아 해당하는 url이 맵핑된 컨트롤러를 메모리에 띄우고 http body에 있는 데이터를 컨트롤러에서 사용할 수 있게 해준다. 컨트롤러에서 db session이 시작된다. [로그인 요청] 4.서버 내부 로직에 의해 service단까지 가서 JPA Repository를 통해 영속성 컨텍스트에 해당 오브젝트(user)가 존재하는지 조회한다. 1) 없으면 DB에 쿼리를 날려서 받은 데이터를 영속성컨텍스트에 저장하고 service단으로 가져온다. 2) 있으면 바로 service 단까지 데이터를 가져온다. 5. service단에서 ..

Spring Security 사용하기

필요한 의존성 org.springframework.security spring-security-taglibs org.springframework.boot spring-boot-starter-security 스프링 시큐리티 로그인 localhost의 어느 url로 요청하든지 spring security가 가로채서 로그인창이 있는 화면을 띄운다. id는 user password는 spring security가 만든 password를 사용한다. spring을 run하면 log에 패스워드를 보여준다. Using generated security password: ㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁ This generated password is for development use only. Your security..