본문 바로가기

spring20

[Spring] Spring AOP 이용하기 하이 ~~!! 여러분 !! 오늘은 Spring 에서 아주 중요한 개념인 AOP (Aspect Oriented Programming) 에 대해 이야기 해보려한다. 딱봐도 쉽게 설명을 해줄꺼고 , 구현도 간단하게 해볼꺼다. AOP AOP는 비지니스 로직 등의 핵심 기능 (Core Concerns) 들과 로깅, 보안 , 트랜잭션 처리 등 핵심 기능을 도와주는 부가기능 (Cross-cutting Concerns) 으로 분리해서 모듈화 하는 것을 의미한다. 간단한 게시판이 있다고 가정해보자. 게시글을 읽고 쓰고, 답글을 읽고 쓰고, 회원가입하고 로그인하는 그런 아주 일반적인 어플리케이션이다. 그런데 이렇게 어플리케이션을 개발하다보면 로그도 남겨야하고 , 보안적인 이슈도 처리하는 등의 공통적인 부가기능들이 생겨나게.. 2020. 4. 5.
[Spring] JUnit을 활용한 스프링 메서드 모듈 테스트하기 하이 ...!! 여러분 !! 스프링은 TDD (Test Driven Development) 기반의 개발을 할 수 있도록 스프링 프로젝트를 만들때 알아서 테스트 환경을 세팅해준다. 우리는 거기다 코드를 작성해서 테스트를 하면된다. 우리는 지난 포스팅들에서 작성했던 CRUD 프로젝트에서 JUnit을 활용하여 단위테스트를 해볼꺼다. JUnit? JUnit은 말그대로 독립된 단위 테스트를 지원해주는 Java의 프레임워크이다. 단위테스트는 소스코드의 특정한 모듈이 내가 의도한 대로 올바르게 동작하는지 검증하는 것을 의미한다. 만약 여러분들이 단위테스트를 잘 작성하면 더 나은 코드를 작성할 수 있고 이는 비용 감소로 이어질테니 잘 작성해서 활용해보길 바란다. 회사에서 일을 하다보면 테스트가 굉장히 귀찮게 여겨지고 .. 2020. 3. 29.
[Spring] JWT 를 활용한 인증 구현 하이 ~~~ 여러분들 이전 포스팅에서 제가 Spring 에서 CRUD를 구현했었다. 이렇게 서비스를 제공하는 것도 중요하지만, 이러한 웹서비스에서는 인증을 어떻게 구현하느냐도 중요하다. 스프링에서는 Spring Security라는 아주 강력한 보안관련 프레임워크를 제공한다. 우리는 오늘 Spring Security중에서 JWT라는 놈을 이용해서 인증서비스를 구현해볼 것이다. youtu.be/TlWzEr4cXfc 오늘 글이 ... 도움되신 분들은 !! 구독과 좋아요도 많이들 부탁드린다 :) 세션 방식과 토큰 방식 과거에는 우린 서버 (세션) 기반의 인증시스템을 활용해왔다. (지금도 이러한 기반의 시스템은 아직 많다 !) 세션 기반의 인증 시스템은 유저가 인증할 때 이 기록을 서버에 저장하고 어떤 서비스를 .. 2020. 3. 28.
[Debugging] 스프링에서 'Missing URI template variable for method parameter of type' 에러 발생할 때 개발한 api를 postman 을 통해서 테스트하다가 Missing URI template variable for method parameter of type string 이라는 에러를 마주쳤다. 원인을 파악해보면 url로 들어가 있는 userid와 파라미터로 들어가는 id 가 서로 달라서 발생한다. 1 2 3 4 @GetMapping("/{userid}") public User getUserByUserId(@PathVariable String id) { return userService.getUserByUserId(id); } 이때 해결방법은 2가지가 있다. 하나는 아래처럼, Mapping 과 같은 변수명을 사용해주는 것이다. 1 2 3 4 @GetMapping("/{userid}") public Us.. 2020. 3. 24.
[Spring] REST에서 CRUD 구현하기 하이 ㅎㅎㅎ 요즘 날씨 진짜 진짜 좋다 ~~!! ㅎㅎ 오늘은 그 동안 갈고 닦은 기본기(?) 를 바탕으로 CRUD를 정석대로 구현해볼꺼다. 다들 잘 따라해보고, 나중에 Spring으로 API 만들거나 웹서비스 만들 때 잘 사용하자. 아 !! 만약에 혹시라도 본인이 기본기(?)가 안된다 싶다!! 아래 링크가서 보고오자. Spring MVC로 RESTFul 서비스 개발하기(1) https://devkingdom.tistory.com/108 [Spring] Spring MVC 로 RESTFul 서비스 개발하기 (1) 하이 ~~ 요즘 날씨가 거의 봄이다 봄 ㅎㅎ 어디 놀러나가고 싶지만 ... 코로나때문에 나가지도 못하고 ㅜㅡㅜ 봄 날씨인 만큼 Spring(?) 공부나 같이 열심히 하자. 지난번에 내가 Sprin.. 2020. 3. 23.
[Spring] Spring MVC 로 RESTFul 서비스 개발하기 (1) 하이 ~~ 요즘 날씨가 거의 봄이다 봄 ㅎㅎ 어디 놀러나가고 싶지만 ... 코로나때문에 나가지도 못하고 ㅜㅡㅜ 봄 날씨인 만큼 Spring(?) 공부나 같이 열심히 하자. 지난번에 내가 Spring Boot 환경 설정을 하고, 간단한 프로젝트 하나를 실행시켰었다. 다들 기억하죠? 기억안나는 사람 손 !! 아래링크로 가서 다시 한번 쭉 보고 오자. https://devkingdom.tistory.com/103 [Spring] Spring Boot 환경 설정 하이 ~~ 오늘은 Spring Boot 환경 설정을 할거다. 자세히 말하면 스프링 부트 2.0 이다. 스프링 5.0 (스프링부트 2.0) 사용하기 위해서는 JDK 8 이상의 버전이 필요하다. 참고로 스프링 4.0은 JDK 6이상이다. 먼저.. devki.. 2020. 3. 21.
[Spring] Interceptor 를 이용한 페이지 전환 구현 (2) 지난 글에서 Interceptor 가 무엇인지에 대해 공부를 했었다. ( https://devkingdom.tistory.com/27) 오늘은 실제로 그 부분을 구현해보려고 한다. 먼저 우리가 해야할 건 HandlerInterceptor를 만들어야하는데, 지난 글에서 Spring에서는 이를 쉽게 구현할 수 있도록 HandlerInterceptorAdapter을 지원해준다고 말했었다. 그렇다면 우리는 이 추상클래스를 상속받아 우리만의 Interceptor를 만들어보자. 여기서 질문 ! redirect를 대체할 메서드는 무엇일까요? 이 질문에 답을 못하면 위의 링크로 가서 다시 글을 읽고 오자. 정답은 preHandle() 이다. 아래는 내가 구현한 Interceptor 클래스이다. 뭐 어렵지 않은 코드이다.. 2019. 10. 30.
[Debugging] Spring 프로젝트 빨간 불 들어올 때. Spring 프로젝트를 하다보면 갑자기 프로젝트에 빨간 불이 들어올 경우가 있다. 처음에 이 에러가 발생하고 해결하는데 정말 하루종일 걸린 적 있다. 해야할 일은 산더미인데 이 에러때문에 화가 나기도하고 슬프기도하고 짜증나기도하고 아무튼 최악의 하루를 보냈던 기억이 난다. 하지만 여러분들은 당황할 필요가 없다 !! 내가 잘 알려줄테니 당황하지말고 이렇게 해보자. 포스팅을 위해 만든 프로젝트에서 이렇게 땡큐하게 에러가 발생해주었다. 지금부터 이 에러를 고쳐보자. 예전의 기억을 더듬어 ...... 내가 했던 해결 방식을 보여주도록 하겠다. 1) Clean project 이 에러를 만나고 처음했던 행동은 clean project였다. 어디에 있냐면 이클립스 (나는 Spring 프로젝트 위해서 STS 사용중임).. 2019. 10. 13.
[Spring] JdbcTemplate 을 이용한 Database 통신 오랜만에 글을 쓴다. 또 해외에 다녀오느라 글쓰는게 늦었다.. 오늘은 JdbcTemplate 을 이용해서 쉽게 Database와 통신해보는 걸 포스팅 할 생각이다. Java를 배우신 분들이면 아마 Jdbc를 이용해서 Database 통신을 해봤을 것이다. 복습한다는 생각으로 Jdbc 에 대해 아주 간단하게 설명해보겠다. 아래 그림을 보자. JDBC 는 Java Databse Connectivity의 줄임말로 Java에서 Database 프로그래밍을 하기 위해 사용되는 API 이다. Driver를 DB에 맞게 로딩해주면 Database 종류에 상관 없이 사용할 수 있고 Connection 객체를 이용해 database를 연결해주고 PreparedStatement 나 Statement 객체를 이용해 SQL .. 2019. 10. 10.