목록Java (14)
지석이의 일기
이번에 세미 프로젝트용으로 채팅을 구현하기로 했다. 서버는 Spring boot , 프론트는 React 로 구성했다. 채팅 기술스택은 websocket 을 사용하려고 한다. WebSocket의 기본 원리 WebSocket 프로토콜은 ws (또는 보안 연결을 위한 wss) 스키마를 사용하여 작동. 클라이언트(보통 웹 브라우저)는 WebSocket 객체를 생성하여 서버에 연결을 시도한다. 이 연결 과정은 HTTP 프로토콜을 사용하여 시작되며, Upgrade 헤더를 통해 WebSocket 연결로 전환. 연결 과정 핸드셰이크 요청: 클라이언트는 서버로 HTTP 요청. 이 요청에는 Upgrade: websocket과 Connection: Upgrade 헤더가 포함되어 WebSocket 연결로의 전환을 요청. 핸드..
Java에서 JWT를 이용하여 Access Token과 Refresh Token을 발행하고, API 요청 시 토큰의 유효성을 검사하는 방법에 대해 알아보겠습니다. 의존성 추가 먼저 'jjwt' 라이브러리를 사용하기 위해 다음의 의존성을 Maven 프로젝트에 추가해야 합니다. io.jsonwebtoken jjwt 0.9.1 Access Token과 Refresh Token 발행 다음은 JWT를 이용하여 Access Token과 Refresh Token을 발행하는 Java 코드입니다. import io.jsonwebtoken.*; import java.util.Date; public class JwtExample { private static final String SECRET_KEY = "SecretKey..
Interceptor에서 토큰 유효성 체크 도중에 유효하지 않은 데이터를 반환 할때, 에러를 throw해야하는 경우가 있습니다. 그때, @ControllerAdvice를 이용해 Spring Boot에서 전역 예외 처리를 하는 방법에 대해 알아보겠습니다. 먼저, 사용자 정의 예외 클래스를 만들어보겠습니다. @Data @ToString public class CustomException extends RuntimeException { private String message; private String code; private String returnUrl; public CustomException(String message, String code , String returnUrl) { this.code =..
간단한 프로젝트를 테스트 하기 위해 DB를 설치하고 설정하기가 여간 귀찮지 않을 수 없다. 물론 추후에 배울 도커를 사용한다면 바로 DB환경을 만들 수 있겠지만, 그건 또 서버가 있어야 가능한 소리이다. 그래서 바로 설정이 가능한 H2 데이터 베이스를 사용 하자. H2 데이터 베이스는 간단하게 말하자면 내가 지금 작동중인 프로젝트 메모리 안에 작은 경량 DB를 만들어 그 안에서 사용하는것이다. 그러므로 매우 가볍고(경량화), 매우 빠르고(고성능) 라는 장점이 있다. 물론 단점으론, 큰 프로젝트에는 사용하지 못하고, 일관성이 유지 되기 힘들다는 점이 있다고 한다. 그러므로 테스트로만 사용하고 실질적인 프로젝트에는 다른 DBMS를 사용하자! 아래는 인터넷에서 찾아 검색한 H2의 장단점 요약이다. 장점: 경량..
아래의 Person 클래스를 이용해서 아래 17개의 구문을 Stream API로 구현하면 되겠다. class Person { private String name; public Person(String name) { this.name = name; } public String getName() { return name; } } 1.나이가 20세 이상인 사람들만 필터링하여 새로운 리스트를 만드세요. 2.모든 사람의 나이 합계를 구하세요. 3.이름에 '5'가 포함된 사람을 찾으세요. 만약 없다면 적절한 처리를 하세요. 4.사람들을 나이 순으로 정렬한 새로운 리스트를 만드세요. 5.각 사람의 이름 길이를 담은 리스트를 만드세요. 6.가장 나이가 많은 사람을 찾으세요. 만약 동일한 나이가 있다면 그 중 아무나 한..
for 만 사용하다가 정렬건때문에 더이상 방관하기 힘들어졌다. stream에 익숙해 지기 위해 예제를 설정하고 문제를 풀어보자. 문제는 아래와 같다. Product 객체를 여러 개 포함하는 List를 생성하세요. (최소 5개 이상의 Product 객체를 포함하도록 합니다.) Stream을 이용하여 가격이 5000원 이상인 제품들만 골라서 리스트로 만드세요. Stream을 이용하여 제품들의 이름만 추출하여 리스트로 만드세요. Stream을 이용하여 제품들의 평균 가격을 계산하세요. Stream을 이용하여 가장 비싼 제품을 찾으세요. 클래스 모델은 아래와 같다 public class Product { private String name; private int price; public Product(Strin..
처음부터 이클립스를 쓰면 된다는 말에 이때까지 이클립스 무료툴을 써왔다. 이번에 일이 있어서 1년치를 받았다. 이제부터 이클립스 대신에 인텔리를 써보자. 각 툴의 장단점은 아래와 같다. Eclipse 장점 오픈 소스: 무료임. 플러그인 시스템: 다양한 플러그인을 설치 및 기능을 확장가능. 넓은 언어 지원: Java 외에도 C, C++, Python 등 여러 언어 지원. 산업 표준: 장기간 업계를 독주한 탓에 대부분의 기업이 그냥 이클립스 씀. 단점 UI/UX: 인터페이스가 낡았다는 평가를 받기도 하며, 때때로 비직관적일 수 있음. 성능 문제: 큰 프로젝트에서는 성능 저하가 발생할수있음. IntelliJ IDEA 장점 직관적인 인터페이스: 깔끔하고 직관적인 UI/UX를 제공. 스마트 코드 완성 및 리팩토링..
요즘 mybatis외에 다른 tool을 사용해서 DB작업을 한다고하여 JPA를 사용해보기로 하자. 결론적으로 말하자면, CRUD 쿼리 없이 메소드명으로 쿼리를 예상(?)하여 api통신을 한다고 보면 된다. mybatis에 특화 되어있고, 쿼리작성에 능숙하면 솔직히 mybatis가 더 편하기도 하다... 또한 복잡한 통계나 계산 쿼리에는 오히려 성능이 떨어질수도 있다. 1. JPA(Java Persistence API)란 반복적으로 수행되는 CRUD 기능 처리에 특화되어있다. 자바 개발자들이 데이터베이스를 더 쉽게 다룰 수 있도록 도와주는 자바 기반의 ORM(Object-Relational Mapping) 기술 ORM은 개체(객체)와 관계형 데이터베이스 간의 매핑을 처리하는 기술로, 개발자가 SQL 쿼리를..
로그백은 왜 하는걸까? 로깅을 통해 개발자는 개발 과정 혹은 개발 후에 발생할 수 있는 예상치 못한 애플리케이션의 문제를 진단할 수 있고, 다양한 정보를 수집할 수 있다. 사용자들의 이동 분석도 할 수있다. 또한 각 단계별로 위험도 등급을 나누어 파일로 적재할수도있다. 하지만 무분별하게 로깅을 난발하면 과유불급이다. 일단 로깅을 설치하고 어디 어디에 로깅 파일을 넣어야하는지 확인해보자. 이번 시간에는 SLF4J 의 구현체 Logback 을 사용해서 로깅을 구현해보겠다. 로그백 초간단 사용 스프링부트에서는 기본적으로 내장이 되어있고, 구현체이다 보니 그냥 별도의 초기화 없이 바로 사용이 가능하다. 이런식으로 클래스 전역 변수로 전언하고, @Controller public class HomeControlle..
지난 시간에 DB 연결을 공부해봤다. 이번에는 DB를 연동뒤, DB에서 데이터를 조회하여, 화면에 뿌리는 과정까지 공부해보자. 1. Back단 생성 기본적으로 트랜잭션을 만들 컨트롤러를 생성하자. 컨트롤러단 @autowired 로 서비스와 연결하자. 매개변수에 Model클래스를 넣어주자. 기본적으로 해당 메소드에 저걸 넣지 않는다고 해도 해당 클래스로 뷰로 데이터를 끌고 간다. Model 클래스에 addAttribute 메소드로, ("변수명",데이터) 로 화면단에 데이터를 보낼수있다. 서비스단 @autowired로 맵퍼를 설정하자. 서비스 클래스는 단순히 중간 연결책이지만, 서비스 클래스에서 데이터를 정재한다. 맵퍼단 interface 맵퍼 생성한다. 인터페이스인 만큼 아무것도없다. mybatis밑에 맵..