Programming/개인 프로젝트 (13) 썸네일형 리스트형 [중고거래장터 - Study&Refactoring] Spring Security를 활용한 로그인 처리 Spring Security를 활용해서 로그인 기능을 구현했습니다. Spring Security는 사용자 인증 및 처리 방식에 대해서 사용자가 임의로 설정할 수 있도록 유연한 구현 환경을 제공합니다. 아래 이미지는 로그인 처리를 위해 사용자 정의 클래스를 생성해서 처리하고 있는 모습입니다. 이해를 돕기 위해 Spring Security 설정 파일을 확인해봅니다. 파일 설정 내용을 확인해보면 사용자 정의 클래스가 빈으로 등록되어 있고, 등록된 빈을 가지고 Spring Security 설정을 하는 것을 확인할 수 있습니다. security-context.xml 사용자 정의 클래스에 대한 내용은 아래 링크를 통해 확인할 수 있습니다. https://github.com/chan-gon/joonggo-market.. [중고거래장터 - Study&Refactoring] 트랜잭션 설정을 통한 데이터 무결성 확보 하나의 요청을 처리하기 위해 하나 이상의 메소드를 호출해야 하는 경우가 있습니다. 이 때 DB에서 하나 이상의 트랜잭션이 발생합니다. 예를 들어 사용자 비밀번호를 변경하는 메소드가 있습니다. @Override @Transactional public void changeUserPwd(UserVO user) { UserVO newUser = userMapper.getUserById(user.getUserId()); String encodedPwd = PasswordEncryptor.encrypt(user.getUserPwd()); UserVO changeUser = UserVO.builder() .accountId(newUser.getAccountId()) .userPwd(encodedPwd) .build(.. [중고거래장터 - Study&Refactoring] locale 변경 로컬 환경에서 구현한 서비스를 AWS 환경에 배포하고 구동했습니다. 로그인 시 아이디/비밀번호가 일치하지 않으면 다음과 같은 메시지가 출력되도록 구현했습니다. 그런데 아래와 같은 메시지가 출력되었습니다. No message found under code 'error.BadCredentials' for locale 'en_US' 아이디/비밀번호 관련 오류 발생 시 security_ko_KR.properties 파일의 error.BadCredentials의 문구가 출력되어야 합니다. .properties 이름에 있는 locale 정보(ko_KR)를 인식해서 properties 파일을 열고, 내부의 메시지를 출력합니다. 그런데 ko_KR 파일이 아닌 en_US 파일을 찾고 있습니다. 문제는 en_US 파일을 .. [중고거래장터] Server Architecture 다른 사람들의 프로젝트 리포지토리를 보면 Server Architecture를 멋지게 만들어 놓은 것을 자주 볼 수 있습니다. 저는 그것이 부러웠습니다. 미적으로 멋있다는 것이 아니고 복잡한 설계를 할 수 있는 지식이 부러웠습니다. 이번 프로젝트에서 제가 설계한 구조입니다. 처음부터 이렇게 설계하지 않았습니다. 아니, 처음에는 개발 환경 설정 및 구현 자체가 버거웠기 때문에 설계 작업 자체를 생각하지 못했습니다. 그래서 모든 작업이 끝나고 문서 작성을 하면서 "아, 내가 이렇게 구현했었구나?" 하는 느낌으로 앞에서 뒤로 천천히 톺아보면서 구조를 정의했습니다. 이 작업을 통해 느낀 점은, 처음부터 설계 방향을 잡고 구현했다면 작업 속도 및 결과물이 지금보다 더욱 좋았겠다는 것입니다. 설치 및 사용과는 별개.. [중고거래장터 - Study&Refactoring] Spring Rest Docs 적용을 통한 API 문서 작성 개발한 중고거래장터 wiki 페이지에 등록할 API 문서를 작성하기 위해 Spring Rest Docs를 사용하기로 결정했습니다. Swagger도 많이 사용하지만, Swagger는 API 테스트 작업에 특화되어 있습니다. 테스트가 아닌 문서 작성 기능만 필요하기 때문에 Swagger와 비교해서 좀 더 깔끔한 문서를 만들 수 있는 Spring Rest Docs를 선택했습니다. Spring Rest Docs 적용에 다음과 같은 기술을 사용했습니다. Spring 5 Maven JUnit4 MockMVC AsciiDoc 그리고 개발 환경은 다음과 같습니다. Spring Legacy Project(MVC) Spring 5.0.7 Maven Java 1.8 MySQL 8.0.27 Redis-x64-3.2.100 구.. [중고거래장터 - Study&Refactoring] 캐싱 기능 적용(Spring MVC + Redis + Jedis) Java 클래스 방식 Redis를 통한 캐싱 기능 설정은 XML 파일 작성 또는 Java 클래스 설정 두 가지 방식이 있습니다. 지난 글에서는 XML 파일 작성 방식을 소개했기 때문에 이번에는 Java 클래스 방식으로 Redis 캐싱 기능 설정 방식을 소개하겠습니다. 지난 글에 소개한 XML 방식과 마찬가지로 Redis + Jedis 방식으로 구현했습니다. 개발환경 Spring Legacy Project(MVC) Spring 5.0.7 Maven Java 1.8 MySQL 8.0.27 Redis-x64-3.2.100 redis 사용을 위한 의존성 설정을 pom.xml 파일에 합니다. pom.xml org.springframework.data spring-data-redis 2.1.3.RELEASE redis.clients j.. [중고거래장터 - Study&Refactoring] Oracle ~> MySQL로 이동 구현한 프로젝트를 AWS를 통해 배포할 예정이기 때문에 DB 구성을 Oracle에서 MySQL로 변경했습니다. 배포 작업을 할 때 AWS RDS를 통해 DB 정보도 함께 가져와야 하는데 Oracle은 프리티어를 제공하지 않습니다. 예전에는 프리티어를 제공했지만 더 이상 제공하지 않습니다. 그래서 구글에 돌아다니는 Oracle 프리티어를 사용한 AWS RDS 포스트는 그림의 떡이 되었습니다. 그래서 이클립스에서 Docker Image를 생성해서 Docker Hub를 통해 AWS 인스턴스로 가져오는 방식으로 배포하려고 했으나 이클립스에서 Docker Image 생성하는 방법을 아직 잘 모르겠습니다. Docker Hub에서 Image를 생성하는 방법도 있지만 사용료를 지불해야 합니다. 그래서 카드 번호를 입력.. [중고거래장터 - Study&Refactoring] 캐싱 기능 적용(Spring MVC + Redis + Jedis) XML 방식 Spring 환경에서 캐싱 기능을 구현하기 위해 Redis + Jedis 또는 Redis + Lettuce를 통한 구현을 권장하고 있습니다. 둘 중 어느 것을 사용해야 할까요? redis 공식 홈페이지의 글을 살펴보면 "본인이 선택하기 나름"이라고 합니다. Jedis를 사용하면 구현이 간단하지만 기능적으로 확장성(Scalability)이 떨어집니다. Lettuce를 사용하면 Jedis와 비교해서 구현이 복잡하지만 기능적으로 확장성이 뛰어납니다. 여기서 말하는 '확장성'은 동시다발적인 요청을 얼마나 유연하게 처리할 수 있느냐를 말하는 것 같습니다. 저의 경우 확장성 보다는 캐싱 기능 구현을 통한 학습에 중점을 두고 있기 때문에 Jedis로 구현했습니다. 일단 캐싱 기능이 어떻게 작동되는지 빠르게 확인하고 .. 이전 1 2 다음