목록Spring (7)
나의 개발 일상 기록
JSESSIONID Session에 대해서 문득 궁금한 부분이 생겼습니다. 만약 사용자 A와 사용자 B가 있다고 한다면 로그인이 된 상태에서 서버는 Session의 정보에 담긴 각 사용자에 대한 로그인 아이디를 HttpSession.getAttribute("userId") 이와 같은 방식으로 정보를 조회를 하는데 과연 어떤 방식을 통해 각 사용자 Session을 구분해서 정보를 가지고 오는 걸까라는 궁금증이 생겼습니다. 구글링을 통해 JSESSIONID를 통해 각 브라우저의 Session을 구분해서 정보를 조회 할 수 있다고 알게되었습니다. JSESSIONID란? Tomcat 컨테이너에서 세션을 유지하기 위해 발급하는 키로 HTTP 프로토콜은 무상태(stateless) 하기 때문에 요청 시 마다 새로운 ..
FireBase를 활용한 Web Push Alarm 사전 작업 1. Firebase 프로젝트 생성 https://console.firebase.google.com/ 위의 url을 접속하여 Friebase 프로젝트를 생성합니다. 프로젝트 생성 과정은 간단하여 생략하였습니다. 2. Web 추가 아래의 그림에서 Web(3번째 아이콘)아이콘을 클릭하여 Web을 생성합니다. 내 웹 닉네임을 본인이 원하는 명으로 기입 후 앱 등록 버큰을 클릭합니다. 화면 초기 진입 시 messaging.requestPermission() 에 의해 Push 알람 권한 요청 화면이 나오게 됩니다. Token 정보 확인 개발자 도구를 열어 Console를 확인 해보시면 Token 정보가 나오게 되는 것을 확인하실 수 있습니다. Serv..
TDD(Test-Driven-Development)란? TDD란 '테스트 주도 개발' 이라고 불립니다. 반복 테스트를 이용한 소프트웨어 방법론으로 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현합니다. 짧은 개발 주기의 반복에 의존하는 개발 프로세스입니다. 애자일 방법론 중 하나인 eXtream Programming(XP)의 ‘Test-First’ 개념에 기반을 둔 단순한 설계를 중요시합니다. eXtream Programming(XP)란? 미래에 대한 예측을 최대한 하지 않고 지속적으로 프로토타입을 완성하는 애자일 기방법론 중 하나입니다. 이 방법론은 추가 요구사항이 생기더라도 실시간으로 반영할 수 있습니다. TDD 개발주기 맨 위의 그림(TDD의 개발주기)를 참..
Kafka Producer Application Kafak Producer는 데이터를 프로듀싱 즉 생산하는 역할을 합니다. 즉, 데이터를 Kafka Topic에 생성합니다. Producer의 역할 Topic에 해당하는 메시지를 생성 특정 Topic으로 데이터를 publish 처리 실패/재시도 gradle 설정 compile group: 'org.apache.kafka', name: 'kafka-clients', version: '2.3.0' Kafka Producer를 작성한 코드 public class Producer{ public static void main(String[] args) throws IOException{ Properties configs = new Properties(); confi..
Kafka 위키백과에서 Kafak는 실시간 데이터 피드를 관리하기 위해 통일된, 높은 처리량, 낮은 지연시간을 지닌 플랫폼을 제공하는 것이 목표이며 분산 트랜잭션 로그로 구성된 상당히 확장 가능한 pub/sub 메시지 큐로 정의한다고 나와있습니다. 데이터 전송하는 Source 애플리케이션과 데이터를 받는 Target 애플리케이션이 있었습니다. Source & Target 애플리케이션들이 많아지면서 데이터를 전송하는 라인이 매우 복잡해졌습니다. 데이터 전송 라인이 많아지면 배포와 장애에 대응하기가 힘들어지니다. 그래서 Apache Kafka는 이러한 복잡함을 해결하기 위해 개발되었습니다. Topic은 일종을 큐 라고 생각을 하시면 됩니다. Producer의 역할은 Topic에 데이터를 삽입을 하며 Cons..
스프링 AOP (Aspect-Orienten Programming) AOP는 관점 지향 프로그래밍이라고 불립니다. 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화 하겠다는 것을 뜻합니다. AOP에서 각 관점을 기준으로 로직으로 로직을 모듈화 한다는 것은 코드들을 부분적으로 나누어서 모듈화하겠다는 의미입니다. 소스 코드상에서 다른 부분에 계속 반복해서 쓰는 코드들을 발견할 수 있는데 이것을 흩어진 관심사라고 부릅니다. 관점 지향 프로그래밍 기능별로 class를 분리했음에도 불구하고 생기는 중복코드의 단점을 해결하고자 하온 방식, 공통기능과 핵심부분을 분리하여, 필요할 때에만 공통기능을 핵심부위에 넣어주는 방식입니다. 횡단 분할 기법이란 OOP..
리눅스 서버에 Admin 컨테이너에서 Image 저장 시 갑작스럽게 java.lang.NoClassDefFoundError : sun.awt.x11GraphicsEnvironment 에레가 발생하였다. 해당 에러가 발생하는 원인에 대하여 찾아보니 일종의 JDK의 버그였습니다. 원인은 자바가 BufferedImage를 생성하고 실제로 Graphics 객체를 얻어오기 위해 getGrahics나 createGraphics 메소드를 부를 때, 실제로 display 하거나 mouse, keyboard 자원을 하나도 쓰지 않을 것임에도 불구하고 내부적으로 AWT Tollkit이 그것들에 대한 자원을 얻어오게 되어있었기 때문입니다. 해결방법은 톰캣같은 경우는 catalina.sh 파일 제일 상단에 CATALINA_O..