분류 전체보기 55

[백준 - 10808 Java] 알파벳 개수

단순한 문자 개수 세기 문제였다. import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String s = scanner.nextLine(); char[] chars = s.toCharArray(); int[] result = new int[26]; for (char aChar : chars) { result[(aChar - 'a')]++; } for (int i : result) { System.out.print(i + " "); } } } Character 는 int로도 따로 캐스팅 필요 없이 치환이 가능하다. ('a' -> 97) 고로..

[백준 - 1406 Java] 에디터

실버 2의 문제로 자료구조를 어떻게 사용하는지를 익힐 수 있는 문제였다. 주어진 문제에서 문자를 삽입하고, 삭제하는 조건들이 있어 LinkedList를 사용하면 찰떡이라고 생각해서 문제를 풀었다. import java.util.*; import java.io.*; public class Main { static int cursor = 0; static List list = new LinkedList(); public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // Scanner scanner = new Scanner(Syste..

[Spring boot 프로젝트 정리 1] 자기참조 - 도서 카테고리 구현

NHN Acadmey에서 인증과정 중 제가 구현한 파트에 대해 정리하고자 글을 씁니다. 인터넷 도서 사이트를 제작하는 프로젝트였고 그 중 카테고리, 주문 조회, 결제, 캐싱처리를 담당하였습니다. 예스알라딘 사이트 첫번째로는 카테고리입니다. 카테고리는 2단으로 구현을 했습니다. 부모 카테고리 - 자식 카테고리로 구현 하였고 자기 참조 방식을 사용하였습니다. 해당 카테고리를 등록, 수정, 삭제, 순서 변경까지 가능하도록 구현하였습니다. 아래는 카테고리의 엔티티 맵핑 관련한 코드입니다. JPA에서 entity를 생성할때, 기본 생성자(NoArgs)를 protected 까지 허용해주기 때문에 롬복 어노테이션을 사용하여 선언하였습니다. 카테고리는 static한 id를 사용하기로 정책으로 정했습니다. 고로 부모 카..

개발/Spring 2023.03.14

[NHN Academy] 백엔드 개발자 2기 과정 요약 및 후기!!

다니던 스타트업을 퇴사하고 백엔드를 공부해보고자 마음을 먹은 뒤로 부트텐트를 우연하게 알게되어 '무료', '오프라인'을 위주로 부트캠프를 찾아보았습니다. 그 중 조선대에서 NHN Academy 광주 1기 ( 경남 + 광주 통합 2기)의 교육생을 모집한다는 글이 있어 퇴사한지 1주일도 못쉬고 바로 자바 공부를 시작했습니다. NHN Academy에서 진행하는 과정은 Advanced JAVA 과정 + JAVA 백엔드 과정 + 인증과정(심화) 로 구성되어있고 모든 과정을 수료하게 되면 약 9개월 가량 소요됩니다. 저 같은 경우는 회사 재직중이었어서 JAVA 백엔드 과정 + 인증과정(심화) 만 참여하여 22.09~23.03 까지 진행했네요 아래는 제가 개인적으로 경험하며 느꼈던 내용들을 정리하고자합니다. 교육과정..

일상 이야기 2023.03.13

[Spring Cache] Spring boot 환경에서 Redis Cache 사용하기

서버를 운영시, 크게 변하지 않는 데이터를 계속 client에서 read 하고자할때, 사용하면 좋은 기능이다. 현재 진행중인 프로젝트인 인터넷 서점 구현에서 메인화면에 보이는 상품의 카테고리가 계속 조회가 되는 것 때문에 성능에 영향을 주는 듯하여 spring의 cache 기능을 사용하고자 하였다. Spring cache는 AOP 기반으로 관심사 분리를 하여 비즈니스 로직에 영향이 없도록 구현이 되어있고, Redis로 사용시, redis에 관련한 의존성만 추가한다면 편하게 사용할 수 있다. (현 프로젝트에서는 기존에 ObjectMapper와 Redis에 대한 설정이 되어있어서 더 편하게 사용하였다.) 우선 spring boot 2.7.7 환경에서 config 설정은 아래와 같다. CachConfig.ja..

개발/Spring 2023.02.15

[Spring] @ResponseBody사용시 DTO에서 is라는 글자가 사라지는 에러 해결 방법

RestController에서 @ResponseBody로 DTO에 바로 맵핑시킬때 json의 body에서 boolean 타입의 is~~~ 에서 is가 사라짐으로 인해서 계속 테스트가 실패하였다. 위의 사진과 같이 Dto가 HttpMessageConverter를 통해 변환될 경우 이름이 그대로 나오길 바랬지만 is가 생략이 되어 나왔다 일반적인 해결방법으로는 @JsonProperty("{json에서 보였으면 하는 이름}") 을 사용하여 해결하는 방법이 있는데 위 사진과 같이 shown은 그냥 존재하고 내가 설정한 이름은 또 따로 추가가 되었다. 그리하여 최종적으로 해결방법을 찾은 것은 Wrapper 타입의 boolean을 사용하는 것이다. JsonMessageConverter가 어떠한 연유인지는 모르겠지만..

[Spring] JPA entity 설정시 SQL Error: 1064, SQLState: 42000 에러

JPA에서 entity mapping을 하다 보니 아주 간단한 엔티티임에도 불구하고 save()가 지속적으로 실패하여 확인해본 결과 Mysql에서 order 라고 하는 예약어가 존재하여 아래와 같은 에러 메세지를 뿜어냈다. 그러므로 해결 방법은 백틱(₩ -역 작은 따옴표)을 활용하여 이름을 변경하는 것이다 참고 : DB별 예약어 정리가 잘 되어있는 블로그 https://yjh5369.tistory.com/entry/Spring-boot-JPA%EC%97%90%EC%84%9C-DB-%EC%98%88%EC%95%BD%EC%96%B4%EB%A5%BC-column%EC%9C%BC%EB%A1%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95

[Spring] Spring MVC 정리

servlet 에서 모든 클래스가 servlet일 필요가 없어서 Front Controller 패턴을 사용하여 프로그램으로 들어오는 요청 및 응답을 하나의 servlet이 처리를 하였다. Spring MVC 에서의 Front Controller : DispatcherServlet ApplicationContext 와 WebApplicationContext의 차이 WebApplicationContext : ApplicationContext + ServletContext 설정 방법 WebConfig.java 를 생성 Controller만 따로 web요청을 처리하기 위해 따로 @ComponenetScan 해야함 (spring boot에서는 x) @Configuration, @EnableWebMvc 을 선언 W..

개발/Spring 2022.12.23

[Spring] Spring security + @WebMvcTest 403에러 발생

RestController를 테스트 하고자 @WebMvcTest 어노테이션을 사용하여 테스트를 진행하고자 하였다. (@WebMvcTest는 @SpringBootTest 보다 ComponentScan 하는 범위가 좁아 더 가볍다고 한다) 그러나 로직에는 문제가 없어 보였는데 지속적으로 HTTP Status code 중 403(Forbidden) 오류가 지속적으로 떴다. Spring Security 프로젝트를 의존성 추가를 하여 사용하고 있음을 깨닫고 csrf 필터를 확인해보았지만 disable() 해놓았기 때문에 문제가 될 것이 없을 것이라 생각했다. 그리하여 열심히 구글링 중 "뷰티플 프로그래밍" 이라는 블로그(아래 링크 참고)에서 해당 문제를 동일하게 겪고 난 후의 해결 방법을 공유해주셨다. mockM..