Spring 10

[Spring] Security Handler에 @Value 값 받아오기

URL의 하드코딩을 막기 위해 리팩토링을 하는 중, 에러가 났다. UriComponentsBuilder에서 @Value 의 값이 정상적으로 사용되지 않는 것을 확인하였고, 처음에는 UriComponentsBuilder의 문제라고 생각되서 단순 문자열로 만들어주었다. 하지만 똑같이 에러가 나는 것을 확인할 수 있었고, 불러온 ip의 값이 null이 되는 것을 찾아내었다. 그래서 Handler에서 값을 받는 방법을 찾아보다가, Spring의 Bean 등록 순서에 있어서의 문제라는 것을 확인하였다. 따라서 Config에서 다음과 같은 Bean을 static으로 추가해주고(static이여야 먼저 빈 등록이 되어 값을 가져올 수 있다) Config에서 Handler로 ip를 DI해주었다. @Bean public ..

java/spring 2022.12.06

[Spring] MapStruct @Mapping 에너테이션

string을 받아서 객체의 필드 값 string으로 매핑을 해주고 싶었는데, 이거때문에 전부 다 적자니 귀찮았다. 그래서 찾아보니까 @Mapping 에너테이션으로 처리가 가능했다. String -> Object.String @Mapping(source = "givenCoin", target = "givenCoin.code") @Mapping(source = "takenCoin", target = "takenCoin.code") Swap swapPostToSwap(SwapDto.Post requestBody); 참고 MapStruct 1.5.3.Final Reference Guide MapStruct 1.5.3.Final Reference Guide If set to true, MapStruct in w..

java/spring 2022.12.01

[Spring Security] @AuthenticationPrincipal로 token claims 바로 받기

controller단에서 토큰 정보를 가지고 작업을 하고 싶을 때, 다음과 같이 간단하게 불러올 수 있다. 먼저 SecurityFilter에 다음과 같은 작업을 추가 /** * Authentication(인증) 객체를 SecurityContext 에 저장 */ private void setAuthenticationToContext(Map claims) { List authorities = customAuthorityUtils.createAuthorities(Role.valueOf((String) claims.get("roles"))); Authentication authentication = new UsernamePasswordAuthenticationToken(claims, null, authoriti..

java/spring 2022.11.23

[CI/CD] 로컬 spring 서버에서 ElastiCache 연결 삽질

로컬 스프링 서버에서 ElastiCache로 연결을 하려고 하자 다음 에러가 났다. Caused by: io.netty.channel.ConnectTimeoutException: connection timed out: onecoinredis.8tcrzi.ng.0001.apn2.cache.amazonaws.com/172.31.40.169:6379 뜬금없이 host와 port 사이에 로컬ip가 붙어서 에러가 난다. build.gradle에 redis-cli도 설정해줬고, ec2로는 해당 엔드포인트로 잘 접속된다. 그렇게 막 자료를 찾다가, 로컬에서는 테스트가 안된다는 얘기를 보았다. 그래서 수동으로 서버에 빌드 파일 올리고 테스트 한 결과! 통신과 저장이 잘 되는걸 확인하였다. 이유도 모르고 오후 내내 이거..

[Spring] 서버에서 get 요청으로 이미지 전송

프로젝트 내용 중 get 요청을 받아서 aws 서버 안에 저장된 이미지를 전송하는 기능을 구현해야했다. 해당 내용으로 검색을 하니 보통 MultipartFile을 이용하여 전송하는 경우가 많았는데, postman으로 get 요청을 해서 바로 이미지를 확인할 수 있도록 구현하고 싶었기 때문에 다른 방법으로 구현하였다. Service @Transactional public byte[] pathToImages(String path) throws IOException { InputStream imageStream = new FileInputStream(path); byte[] imageByteArray = IOUtils.toByteArray(imageStream); imageStream.close(); retu..

java/spring 2022.10.18

Android Studio + Spring Boot 로 Google OAuth2 로그인

혼자서 프론트와 백을 동시에 구현하기 위해서 구글링만 3시간은 한 것 같다. 웹 클라이언트라면 이미 로컬 서버에서 구현한 경험이 있어서 간단하게 생각했다. 결론만 말하자면 웹과 동일하게 진행하면 된다. https://developers.google.com/identity/sign-in/android/backend-auth 백엔드 서버로 인증 | Google Sign-In for Android | Google Developers 웹용 Google 로그인 자바스크립트 플랫폼 라이브러리가 지원 중단됩니다. 지원 중단 날짜인 2023년 3월 31일 이후에는 이 라이브러리를 다운로드할 수 없습니다. 대신 새로운 웹용 Google ID 서비스를 developers.google.com 물론 아직 실행을 시켜보진 않았..

캡스톤 디자인 2022.10.07

[Java Spring] POJO, IoC/DI, AOP, PSA

POJO (Plain Old Java Object) 이름 그대로 순수 자바 객체를 의미한다. POJO 프로그래밍에는 다음의 2가지 규칙이 따른다. Java나 Java의 스펙에 정의된 것 이외에는 다른 기술이나 규약에 얽매이지 않아야 한다. (ex. 2개 이상의 클래스로부터 상속 불가능) 특정 환경에 종속적이지 않아야 한다. (ex. tomcat의 api를 직접적으로 가져다 사용) POJO 방식 프로그래밍의 장점은 다음과 같다. 재사용성이 높고 확장이 가능한 유연한 코드 작성 용이 저수준 기술이나 환경 종속적인 코드 제거로 인한 가독성 향상 및 디버깅 효율 상승 객체지향적 설계를 제한 없이 적용 가능 IoC (Inversion of Cotrol) 어플리케이션 흐름의 주도권을 바꾼 것을 의미한다. 일반적인 ..

java/spring 2022.08.09