Spring - Login(Security) 요청에서 한글 깨짐 문제 원인과 해결 방법
·
나의 에러 일지
배경 사이드 프로젝트를 진행중에 프론트 님께서 연락이 왔다. 로그인할 때 nickname에 한글을 사용해서 가입했는데 깨져서 나온다고한다! 그런데 다른 api 요청에서는 한글이 잘 나온다..읭? 왜 로그인 요청에서만 한글이 깨지지??? araboza 원인 다른 api와 로그인 api의 차이점이 있다. 로그인 요청은 Security에서 동작한다. 그리고 로그인 요청은 Dispatcher Servlet을 거치기 전에 수행된다! 그래서 Encoding Filter를 거치지 못해서 한글이 깨지는 것이라고 볼 수 있다. Encoding Filter란 Dispatcher Servlet 전에 설정한 인코딩으로 변환해서 컨트롤러에서 사용되게 해준다. @Slf4j @Configuration @RequiredArgsCon..
Spring - 회원 팔로우 기능 구현
·
Spring
배경 요즘 취업 준비때문에 정신이 없다. 틈내서 사이드 프로젝트를 진행중이다. 이번에 회원 팔로우 기능을 구현했다. 구현한 과정을 정리해본다. 개발 환경 Java 11 Spring 2.x JPA Gradle MySQL, Redis IntelliJ 요구사항 회원을 팔로우할 수 있습니다. 팔로우한 회원을 언팔로우 할 수 있습니다. 회원의 팔로워 수와 팔로잉 수를 확인할 수 있습니다. 관계 Member의 자기 참조 관계를 사용해서 Follow 엔티티를 구현했다. Follow는 Member를 참조하고 있고, 이를 통해서 팔로워(follower)와 팔로잉(following) 간의 관계를 나타내게 했다. 구현 Member @Entity @Getter @DynamicInsert @NoArgsConstructor(ac..
Network - TCP, UDP
·
Network
TCP/IP 4계층 모델 TCP와 UDP는 TCP/IP 4계층 모델을 기준으로 IP 프로토콜의 계층인 인터넷 계층의 상위에서 동작한다. 전송계층에 속하는 TCP와 UDP는 2계층에서 동작하는 IP와 4계층에서 동작하는 애플리케이션을 중개하는 역할을 한다. 4층 응용 계층 HTTP, DNS, FTP, ... 애플리케이션에 맞추어 통신 3층 전송 계층 TCP, UDP, ... IP와 애플리케이션을 중개해 데이터를 확실하게 전달 2층 인터넷 계층 IP, ICMP, ARP, RARP 네트워크 주소를 기반으로 데이터를 전송 1층 네트워크 접근 계층 Ethernet, wifi, ... 컴퓨터를 물리적으로 네트워크에 연결해서 기기 간에 전송이 가능하도록 함 TCP, UDP 특징 TCP는 3-way handshake ..
Spring - "urlTemplate not found. If you are using MockMvc did you use RestDocumentationRequestBuilders to build the request?" 원인과 해결 방법
·
나의 에러 일지
배경 이번 에러는 RestDocs를 생성하기 위한 통합 테스트 중 api에 path parameter를 문서화하는 과정에서 발생한 에러다. 아래는 에러가 발생했던 테스트 코드이다. @Slf4j @Disabled @Transactional @SpringBootTest @AutoConfigureMockMvc @AutoConfigureRestDocs @ActiveProfiles("test") public class BaseIntegrationTest { @Autowired protected MockMvc mvc; @Autowired protected Gson gson; } @Slf4j class FeedIntegrationTest extends BaseIntegrationTest { private final..
MySQL - 프로그래머스 164670. 조건에 맞는 사용자 정보 조회하기
·
SQL
[unrated] 조건에 맞는 사용자 정보 조회하기 - 164670 문제 링크 성능 요약 메모리: 0.0 MB, 시간: 0.00 ms 구분 코딩테스트 연습 > String, Date 채점결과 Empty 문제 설명 다음은 중고 거래 게시판 정보를 담은 USED_GOODS_BOARD 테이블과 중고 거래 게시판 첨부파일 정보를 담은 USED_GOODS_FILE 테이블입니다. USED_GOODS_BOARD 테이블은 다음과 같으며 BOARD_ID, WRITER_ID, TITLE, CONTENTS, PRICE, CREATED_DATE, STATUS, VIEWS는 게시글 ID, 작성자 ID, 게시글 제목, 게시글 내용, 가격, 작성일, 거래상태, 조회수를 의미합니다. Column name Type Nullable B..
Spring - Spring Boot 초기 데이터 설정 (data.sql)
·
Spring
프로젝트를 진행하면서 회원 가입할 때 선택할 수 있는 관심사 태그가 필요했다.Enum으로 관리할지 테이블로 관리할지 고민했었는데, 동적으로 관리해야 할 필요가 있어서 테이블로 관리하기로 했다.관심사 태그는 미리 지정되어 있기 때문에 데이터를 미리 넣어 사용하도록 해야 했다.그럼 Spring Boot에서 어떻게 초기 데이터를 설정하는지 알아보자 yml 설정spring: ... jpa: hibernate: ddl-auto: create defer-datasource-initialization: true sql: init: mode: alwaysspring.jpa.hibernate.ddl-auto: create:  Hibernate가 데이터베..
Spring - 통합 테스트에서 S3 Mock 객체로 S3 자원 아끼기
·
Spring
배경 파일 업로드를 위해 S3를 연결하고 테스트하는 과정에서 문제가 발생했다. S3에 테스트를 위해 생성한 파일들이 계속 저장되어 있던 것! 단위테스트는 Mock을 사용하기 때문에 문제가 없었지만 통합테스트에서는 모든 로직이 그대로 실행되서 저장되는 로직이 포함된 만큼 파일이 S3에 저장됐다. 프리티어를 사용하고 있었기 때문에 GET, POST를 요청을 보낼 수 있는 횟수 제한이 있었고 정신없이 테스트를 돌리다보니 GET 500회, POST 900회나 실행되고 있었다. 이 문제를 해결하기 위해 통합 테스트에서도 S3를 Mock으로 만들어 사용해야 했다. 구현 AwsS3Config 기존에 AmazonS3 Bean을 생성하기 위한 코드이다. 해당 Bean을 사용하지 않도록 Test용 Bean을 만들어서 사용..
Java - java.util.ConcurrentModificationException 원인과 해결 방법
·
나의 에러 일지
배경 프로젝트를 진행하면서 피드의 ImageUrl을 수정하는 로직이 있었는데 여기서 java.util.ConcurrentModificationException 예외가 발생했다. ConcurrentModificationException는 무엇이고 어떻게 해결할 수 있는지 알아보자 private void removeFeedImages(List removeImageUrls, Feed feed) { if (removeImageUrls != null) { if (feed.isImageUrlsSizeOne()) { log.debug("FeedService.updateFeed exception occur " + "removeImageUrls : {}, saveFeedImageUrls : {}", removeImage..
Spring - 중복된 Bean이 없는데도 발생하는ConflictingBeanDefinitionException 원인과 해결 방법
·
나의 에러 일지
배경 파일을 이동하거나 삭제하는 작업 이후 ConflictingBeanDefinitionException을 만날 때가 있다. nested exception is org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'memberRepository' for bean class [클래스 경로] conflicts with existing, non-compatible bean definition of same name and class [중복된 클래스 경로] 일반적으로 ConflictingBeanDefinitionException는 중복으로 등록된 클래스가 존재할 때 발생하는 ..
Java - @Override는 왜 사용할까?
·
Why?
배경 프로젝트를 진행하다 문뜩 @Override 애너테이션을 보다가 이런 생각이 들었다. "이 애너테이션이 반드시 있어야하나?"라는 생각이 들어서 정리를 해봤다. @Override란? @Override는 상위 클래스나 인터페이스의 메서드를 오버라이딩했을 때 오버라이딩한 메서드를 명시해주는 애너테이션이다. 왜 사용할까? 메서드를 오버라이딩하려면 메서드명, 매개변수, 반환 타입이 상위 클래스의 메서드와 정확히 일치해야 한다. 그러나 휴먼에러로 상위 클래스의 메서드와 다르게 작성하는 경우가 생길 수 있다. 하지만 자바는 해당 메서드 오버라이딩 된 메서드인지 알 수 없기 때문에 다른 메서드로 취급하고 에러를 발생시키지 않는다. 이 때 @Override 애너테이션을 사용하면 컴파일러가 해당 메서드가 상위 클래스를..
Cold Bean
'분류 전체보기' 카테고리의 글 목록 (7 Page)