애정코딩 💻

Interceptor 활용하기 ( feat . ArgumentResolver, Custom Annotation )

동기분의 도움으로 처음으로 Interceptor 를 적용해보아서 나중에 사용할 일이 있을 때 찾아보려고 써봅니다! 아래와 같은 Controller 에 Header 에서 인증을 위한 값을 받아야지만 접근할 수 있도록 설정하겠습니다! @RestController @RequestMapping("/orders") @RequiredArgsConstructor public class OrdersController { private final OrdersService ordersService; @Auth(type = ApiServiceType.HOMEPAGE) @GetMapping public ResponseEntity getOrders( @RequestParam(required = false) String sear..

WEB/Spring 2022.03.25 Joana

Spring boot + JWT + RefreshToken 구현하기

아주 기본적인 코드까지 모두 있습니다.. 왜냐면... 저도 기술 블로그들을 보면서 빠져있는 부분을 보면 나같은 초보는 어쩌라고 하며 슬퍼했기 때문에,,, 사실 Security의 여러가지 Filter를 사용하여 JWT 방식을 이용하는게 맞지만 프로젝트 크기,, 기간상 불필요하다 판단하게 되어서 JWT 만을 사용하여 구현하였다. 나중에 Security도 같이 구현하여 올리도록 하겠음! 이번에는 git에 올려 코드까지 공유하기로 했다! 처음보면 약간 복잡하다고 생각되고 나또한 그랬다 ㅠㅠ,, (부끄러운) 구현코드를 보면서 이해하고 혹시 이상한곳은 PR해주시면 감사하겠습니다...(간절,,) git 주소 (실무에서 실제로 사용하면서 수정하고 있습니다 ~!) git clone https://github.com/ae..

WEB/Spring 2021.01.29 (10) Joana

Spring boot에서 JSP 사용하기

구조 구조를 보면 resources와 같은 경로에 webapp을 만들어 주시면 됩니다. 안에 WEB-INF는 똑같이 만들어주시고 application.yml에 설정에 따라 안에 있는 폴더 이름은 변경할 수 있습니다. application.yml spring: mvc: view: prefix: /WEB-INF/jsp/ suffix: .jsp build.gradle // JSTL implementation 'javax.servlet:jstl:1.2' // JASPER implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' springboot에서 jps를 사용하려면 외장톰캣을 의존성으로 추가해줍니다. jsp는 극혐이니 jstl도 추가해줍니다. 기본 탬플릿 ..

WEB/Spring 2021.01.25 Joana

Mapper Interface?

면접보기 위해 과제를 해야 했다. 프로젝트를 파일을 받았는데 계속 구현해오던 구조와는 많이 달라서 시간을 많이 썼다. 하지만 역시나 인터넷을 자세히 보고 엄청난 시행착오를 한 후에 적응할 수 있었다. 언제 다시 쓸 수 있을지 몰라 기록해 두기로 했다. Mapper의 SQL ID와 Mapper Interface의 메서드명과 정확히 매칭해준다면 자바에서 메서드를 호출하기 때문에 오타에 대한 걱정이 없다. 개발을 배우면서 쓰던 구조는 대충 이런식이었다. 그러나 이번에 받은 과제는 Mapper Interface, Service class, sql.xml 이렇게 3가지로 있었다. 처음 본 구조 1.propertis에서 알리아스를 이용해 sql에서 dto로 연결해주던 것을 annotation을 사용하면 아주 간단하..

WEB/Spring 2020.07.23 Joana

Spring 총정리 3.Annotation

특징 ? - Spring Web MVC Framework는 JAVA1.5부터 Annotation을 지원합니다. - xml설정이 너무 길어짐에 따라 그 대안으로 나타났다. - 기본적으로는 활성화되지 않기 때문에 xml에서 확성화 작업이 필요하다. 장점 ? - 설정이 간편해 짐, view 페이지와 객체 또는 메서드의 맵핑이 명확해 짐. Annotation을 사용하기 위해서는 설정이 필요합니다. 3가지 방법이 있습니다. 1) CommonAnnotationBeanPostProcessor에 클래스 설정파일에 빈객체로 등록하여 어노테이션으로 사용 2) 태그 사용 : 이미 등록된 빈들의 어노테이션을 활성화 3) : 특정 패키지 안의 클래스들을 스캔하고, Annotation을 확인 후 bean 인스턴스를 생성 - 스테..

WEB/Spring 2020.06.13 Joana

Spring 총정리 2.Spring 3대 작동원리

Servlet에서 1:1mapping을 보안해서 자동으로 분기, 자동으로 생성화면 이동이 가능합니다. 여기서 이 Controller는 다양한 요청을 제어하여 J2EE Pattern: frontController 라고 합니다. Business Layer에서 handler mapper를 잊고 그리지 않았는데 알아두어야 합니다. Handler Mapping : dispatcherSevlet으로 받은 요청 -> Controller 보냄-> 요청이 어떤 매핑인지 그 방법을 정해주는 클래스 입니다. Spring 3대 작동원리에 대해 알아보겠습니다. 1. DI/IoC - Bean Spring 사용할 수 있도록 등록 - Life-Cycle을 따라가지 않고 사용 POJO를 Spring bean혹은 @Annotation을..

WEB/Spring 2020.06.06 Joana

Spring 총정리 1.Spring에 기반이 되는 Servlet

Spring FrameWork를 설명하기 전 Servlet을 먼저 설명하겠습니다. Servlet이라 하면 3가지를 알아두면 좋아요. Url-Mapping, Hierarchy, Life-cycle입니다. 하나씩 알아볼게요! Url-Mapping 1:1 servlet-mapping 브라우저에서 ws에 요청하는 주소와 해당 주소의 처리 로직을 1:1 매핑한다 문제 : 너무 많은 mapping으로 코드가 복잡해진다. Life-Cycle (생명주기) HttpServlet -> OCP(Open Closed Programming) 초기화 -> 서비스 -> 종료 init() service() distroy() doGet() doPost() doDelete() Hierarchy 계층구조 HttpServelt을 상속받아 ..

WEB/Spring 2020.06.06 Joana

이미지 업로드 (Spring+Ajax)

Hyper 프로젝트를 하면서 과정 중 어려워했던 파일 업로드에 대해서 다시 공부하게 되었다. commons-fileupload를 사용하였고 pom.xml에 추가해줘야 한다. Ajax로 구현해야 하니 Controller에 @ResponseBody를 붙여줘야 한다 이거 또한 사용하려면 pom.xml에 jackson-mapper를 추가해줘야 한다. pom.xml에 추가해야 할 것. (mvnrepository.com) 1. commons-fileupload 2. jackson-mapper 제일 먼저 파일 업로드를 구현 후 미리보기를 하겠다. 1. spring 폴더에서 xxx-context.xml 에 파일 리졸버를 지정해줘야 한다. + application / servlet -context의 차이 더보기 이 두 ..

WEB/Spring 2020.05.16 (1) Joana

세션 저장소

1.톰캣 세션을 사용한다. - 기본 선택되는 방식이다. - WAS에 저장되는데 2대이상의 WAS로 구동되는 환경에서는 추가 설정이 필요하다. 2.MySQL과 같은 데이터베이스를 세션 저장소로 사용한다. - 가장 쉬운 방법이다. - 로그인 요청시 DB IO가 발생할 수 있다. 3.Redis 같은 메모리 DB를 세션 저장소로 이용한다. 사용료를 지불해야한다! 서비스가 커질때 고려! 'org.spirngframework.session:spring-session-jdbc' 를 gradle에 등록해주고 application.prorperties에 spring.session.store-type=jdbc 만 등록하주면 jpa가 세션테이블을 자동으로 생성하여 세션저장소가 지정된다!

WEB/Spring 2020.04.29 Joana

Spring Security , OAuth2.0으로 구글 로그인 구현 1

스프링 시큐리티는 막강한 인증과 인가 기능을 가진 스프링 프레임워크이다. 인증이란, 보호된 리소스에 접근한 대상에 대해 누구인지, 작업을 수행해도 되는지 확인하는 과정이다. 인가란, 인증 이후에 해당 리소스에 대해 접근 가능한 권한을 가지고 있는지 확인하는 과정이다. 보안과 관련해서 체계적으로 많은 옵션을 제공해주기 때문에 개발자가 일일이 보안 관련 로직을 작성하지 않아도 된다. 구글 로그인 기능 구현해보자! https://console.cloud.google.com/ 로 접속해서 새로운 프로젝트를 생성한다. 프로젝트를 선택한 후 API 및 서비스 -> 사용자 인증 정보 OAuth 클라이언트 ID 클릭! 동의 화면 중 외부/내부가 있는데 외부를 클릭한다. 애플리케이션 이름 : 사용자에게 노출될 애플리케이..

WEB/Spring 2020.04.15 Joana

JPA Auditing 으로 생성/수정시간 자동화하기

교육과정 동안 언제 만들어졌는지, 언제 수정되었는지에 따른 유지보수 중요성을 배우진 못했다. 이제 모델링할 때 고려해서 짜야겠군... 같은 내용인데 매번 DB에 insert/update을 하기에는 코드가 여기저기 들어가게 되니까 생성될 때 같이 생성되면 편리하다! domain 폴더에 BaseTimeEntity클래스를 만들어주고 모든 Entity의 상위 클래스가 되게 하면 된다. 1. @MappedSpuerclass 를 이용하면 JPA Entity클래스들이 BaseTimeEntity를 상속할 경우 필드들도 컬럼으로 인식하도록 한다. 2. @EntityListeners(AuditingEntityListener.class)로 해당 클래스에 Auditing기능을 포함한다. 3. @CreatedDate priva..

WEB/Spring 2020.04.14 Joana

실제로 실행된 쿼리의 형태

JPA가 관계형데이터베이스에 맞게 SQL을 대신 생성하여 실행하기 때문에 실제로 실행된 쿼리의 형태가 궁금할 수 있다. application.properties를 만들어준 후 spring.jpa.show_sql = true 를 작성해준다. 짜란!

WEB/Spring 2020.04.10 Joana