전체 글
-
Redirect와 Forward의 차이 ( Spring )프로그래밍/서버 프로그래밍 2020. 11. 9. 00:20
Redirect redirect는 서버에 요청이 들어온 후 , 서버에서 실제로 클라이언트로 HTTP Stauts Code 302를 전송한다. 전송된 응답을 클라이언트에서 받아서 302 응답코드를 확인하고 응답의 Location 헤더에서 URL을 읽어들여 해당 URL로 다시 요청을 보낸다. Forward forward는 서버에 요청이 들어온 후, 서버에서 모든 일이 벌어진다. 서블릿 컨테이너는 해당 요청을 그대로 타겟 URL로 포워딩 시킨다. 따라서 URL은 브라우저에서는 변경되지 않을 것이고, 리다이렉트와 다르게 응답은 한번만 내려오게 된다. 스프링에서의 처리 스프링에서 redirect, forward는 보통 컨트롤러에서 redirect:/hello, forward:/hello와 같은 String을 리턴..
-
[ Spring AOP ] pointcut 안걸릴때프로그래밍/서버 프로그래밍 2020. 5. 12. 11:48
문제 발생 최근 흥미가 있던 Kotlin으로 간단한 텔레그램 알림을 주는 봇을 만들면서, Telegram Bot Java Library를 사용하고 있었다. Telegram Bot Java Library에서는 TelegramLongPollingBot의 onUpdateReceived를 오버라이드하여서 사용자로 부터 메시지를 받았을 때 어떻게 동작할 지를 정의하게 되어있다. 해당 메소드가 실행되기 전과 후에 사용자가 가장 마지막에 보낸 요청의 시간 및 마지막에 요청했던 커맨드를 저장하기 위해 Spring Aop를 이용해서 커스텀 어노테이션을 달고, 해당 메소드 실행 전후에 기록을 남기려 했었는데, 커스텀 어노테이션을 이용해보기도 하고, 메소드명을 직접 넣어보기도 했는데 계속해서 걸리지 않았다. 해결 방안 탐색..
-
Spring Boot + Kotlin + JPA 적용하기 Entity 생성시 생각해볼 점들프로그래밍/서버 프로그래밍 2020. 1. 28. 16:23
2020-05-12 우아한 형제들 기술 블로그 - 코틀린에서 하이버네이트를 사용할 수 있을까?에 나온 내용 추가합니다. 4. data class 사용에 대해 본글에서 적은 순환참조 이슈 외에도 다른 이슈가 나와있어서 링크 추가합니다. Hibernate의 Lazy Loading을 사용하기 위해서는 Data class를 사용할 수 없습니다. 최근 코틀린으로 스프링 부트 사용을 공부하고 있습니다. 연휴에 이동욱님의 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 를 코틀린으로 따라 해 보기를 도전하면서 JPA를 적용하는 방법과 JPA를 적용할 때 Entity 작성법에서 생각해볼 부분이 있어서 공유 겸 글을 작성합니다. 정말 JPA를 프로젝트에 적용하는 것만 필요하신 분은 요약만 보셔도 됩니다! 코틀린에 JPA..
-
[JUnit5 , Spring Boot] 인텔리제이에서 JUnit5 DisplayName이 표시되지 않을 때 해결 방법프로그래밍/서버 프로그래밍 2019. 12. 18. 16:05
최근 Spring Boot가 업데이트 되면서 JUnit5를 많이 공부하고 있다. 특히 @DisplayName과 @ParameterizedTest 를 아주 잘 사용하고 있었다. 그런데 오늘 집에서는 잘 작동하던 코드가 회사에서는 테스트는 통과되는 것으로 보이는데 @DisplayName에서 지정한 테스트명이 노출되지 않는 문제가 발생했다. 주변 동료에게 물어보니 같은 문제를 겪었다며, 해결방법을 가르쳐주셨다. 문제는 바로 인텔리제이가 최근(?) 업데이트 되면서 아래 두 값의 Default 값을 IntelliJ에서 Gradle로 변경했다고 한다. 해당 설정을 다시 IntelliJ로 변경하고, 다시 테스트를 실행해보았다. 위와 같이 정상 작동 하는 걸 알 수 있었다. 이 후 , 블로그에 올리려고, 왜 Defau..
-
[우아한테크세미나] 우아한 스프링 배치 후기프로그래밍/오늘 공부 2019. 9. 26. 23:30
우아한 스프링 배치 지난달에 이어서 운 좋게9월 우아한 테크 세미나에도 당첨되어 세미나에 다녀왔습니다. 취업준비를 할 때 가장 많은 도움을 받은 블로그 이기도 하고, 현재 제가 다니는 회사에 예전에 다니셨다고 하셔서 더 많은 관심이 가는 이동욱님께서 스프링 배치와 관련된 전반적인 개념과 오해들, 또 실무에서의 팁들을 발표해주셨습니다. 아래 내용은 발표를 들으며 정리한 내용입니다. 기본 편 - 기본 개념 & 오해 풀기 배치 애플리케이션? 컴퓨터에서 사람과 상호 작용 없이 이어지는 프로그램 혹은 작업 웹 애플리케이션과는 지향점이 다르다. Web -> 실시간 처리 / 상대적인 속도 / QA가 용이 Batch -> 후속 처리 / 절대적인 속도 / QA 복잡 ( 오히려 테스트 코드의 중요성이 더 높음 ) Spri..
-
자바의 GC 가비지 콜렉션 알고리즘프로그래밍/자바 2019. 5. 22. 13:53
가비지 콜렉션 GC 알고리즘 이번 면접에서 제대로 답하지 못한 몇가지 질문들 중 하나인 Java의 GC에 대해 정리해보자. 가비지콜렉션이란 자바에서 개발자가 따로 메모리를 해제할 필요없이 힙 영역에서 더이상 사용되지 않을 객체들(쓰레기 객체) 를 찾아 메모리를 해제하여 메모리를 자동으로 정리해주는 것을 말한다. 이러한 GC가 발생할 때에는 stop the world 라는 현상이 나타나는데 이는, GC를 실행하기 위해 다른 모든 쓰레드의 작업을 정지시키는 것을 말한다. 어떠한 알고리즘을 사용하더라도 stop the world 는 발생할 수 밖에 없지만, 더 나은 알고리즘을 사용하여 stop the world 시간을 최소화하는 것이 중요하다. 자바의 힙영역은 두가지 영역으로 나뉜다. Young (New) 영..
-
String, StringBuffer, StringBuilder의 차이프로그래밍/오늘 공부 2019. 5. 16. 15:39
String, StringBuffer, StringBuilder의 차이 작년까지는 항상 String을 이용하다가 서버개발을 공부하기 시작하며 StringBuffer를 많이 사용하기 시작했다. 처음에 성능 떄문인 것으로 알고 있었는데 그렇다면 StringBuffer 와 StringBuilder 의 차이는 또 무엇일 지 알아보자. String String 클래스는 Immutable객체이다. 따라서, +연산이나 concat에서 새로운 인스턴스를 생성하기 때문에 성능 문제가 있었다. 하지만 JDK 1.5 이상부터는 컴파일시 내부적으로 StringBuilder로 변환된다. StringBuilder 위의 String 클래스가 +연산이나 concat연산에 취약하기 때문에, 이러한 단점을 해결하기 좋은 클래스로, ap..
-
[ 알고리즘 ] 백준 3078번 좋은친구프로그래밍/알고리즘 2019. 5. 3. 13:20
백준 3078번 좋은 친구 문제 링크 문제 접근 처음에는 단순히 큐를 이용해서 일일히 계산을 하면 되는 쉬운 문제라고 생각하고 시작했다. 정답이 나오는 단순한 코드는 금방 짤 수 있었지만, 제출결과 시간초과...... 결국 계속해서 다른 방법을 도전하다가 다른 분의 코드를 봤는데, 어떻게 이런 생각을 하시고 풀었는 지 놀라울 따름.......... 🤭 먼저 문자열의 길이는 2~20으로 주어졌으므로, 길이 20짜리 Queue 배열을 선언했다. 이 후 문자열의 입력이 들어오는데 이 때, 문자열의 내용은 중요하지 않으므로 바로 길이를 계산한다. 계산한 길이를 이용하여 앞에 선언한 큐 배열의 인덱스로 각 큐를 불러온다. 불러온 큐가 Empty 이면 바로 큐에 넣어주고, 그렇지 않다면 큐 안의 원소들을 앞에서부터..