본문 바로가기

자바29

[프로그래머스] 여행 경로 문제 (Java DFS 풀이) 안녕하세요, 스코리아입니다.오늘은 자바(Java)의 DFS를 이용한 프로그래머스 Lv.3 여행 경로 문제를 풀어보겠습니다. 문제 설명https://school.programmers.co.kr/learn/courses/30/lessons/43164 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr입력값으로, tickets에는 항공권 정보가 2차원 배열로 담겨있습니다.항상 "ICN" 공항에서 출발하고 주어지는 항공권을 모두 사용하여 방문할 수 있는 공항 경로를 return 하는 문제입니다.tickets의 각 행 [a, b]는 a 공항에서 b 공항으로 가는 항공권이 .. 2024. 6. 30.
스프링 API 예외처리 방법 : @RestControllerAdvice [Kotlin] 안녕하세요, 스코리아입니다. 오늘은 스프링의 @RestControllerAdvice 어노테이션을 이용해서 API 예외처리 하는 방법에 대해서 알아보겠습니다. 언어는 코틀린(Kotlin)으로 진행하겠습니다. @RestControllerAdvice 예외처리가 필요한 이유? 만약 비즈니스 계층에서 팀원들이 각각 예외처리를 하고 있는 프로젝트라면, 발생시키는 에러 메시지, 규격, 규율 등이 달라 응답이 정규화되지 않을 것입니다. 하지만 이러한 예외처리 로직을 비즈니스 로직과 분리하여 @RestControllerAdvice 어노테이션이 적힌 클래스 한 곳에서 예외처리를 담당한다면, 일관된 형식의 응답을 제공할 수 있어, 코드의 가독성과 유지 보수성을 높이는데 도움이 될 것입니다. 즉 요약하자면, @RestCont.. 2024. 1. 8.
(2) JWT Access, Refresh 토큰 + Redis : 스프링 코드 구현 [Kotlin] 안녕하세요, 스코리아입니다. 오늘은 저번 시간에 이어서 스프링에서 JWT(Access, Refresh 토큰)을 Redis와 함께 사용하는 코드를 구현해 보겠습니다. 언어는 코틀린(Kotlin)으로 진행하겠습니다. 이전 포스팅에서 JWT가 무엇이고 Refresh 토큰을 사용해야 하는 이유, Refresh 토큰의 보안문제와 해결방안, Redis 활용 장점에 대해서 설명드렸으니, 꼭 읽어보시기 바랍니다! [이전 내용] (1) JWT Access, Refresh 토큰 + Redis : 소개 및 보안 : 바로가기 프로젝트 구현 흐름 스프링으로 코드를 구현하기 전에 어떤 식으로 구현해 볼지 Flow에 대해서 먼저 설명해 드리겠습니다. Access 토큰의 유효기간은 30분, Refresh 토큰의 유효기간은 1달(30.. 2023. 12. 30.
(1) JWT Access, Refresh 토큰 + Redis : 소개 및 보안 안녕하세요, 스코리아입니다. 오늘은 JWT(Access, Refresh 토큰)에 관해 자세히 소개해드릴 예정이며, Redis를 사용하였을 때의 장점과 Refresh 토큰에 관련된 보안 문제점 및 해결방안도 전해드리겠습니다. 다음 포스팅에는 스프링 코드와 함께 설명을 이어나가겠습니다. 세션 기반 인증 vs 토큰 기반 인증 사용자가 인증된 사용자인지 구분하기 위해서 대표적으로 세션 기반 인증, 토큰 기반 인증 방법이 존재합니다. 각각 장단점이 존재하므로 자신의 프로젝트의 상황에 맞게 선택하는 것이 좋겠습니다. 보통 토큰 기반 인증 방법은 무상태성, 확장성, 무결성의 이유로 사용됩니다. - 무상태성 : 사용자의 인증 정보가 담겨 있는 토큰을 클라이언트에 저장하기 때문에 서버에 별도의 저장소가 없어, 완전한 무.. 2023. 12. 25.
스프링에서 Redis 캐시 사용하기 (@Cacheable, @CacheEvict) [Kotlin] 안녕하세요, 스코리아입니다. 오늘은 스프링 3.1.0 환경에서 Redis 캐시를 사용해 보고, DB(Disk)로 불러올 때와 속도 비교를 해보겠습니다. 언어는 코틀린(Kotlin)으로 진행하겠습니다. Redis는 NoSql로서, 인메모리 DB이기 때문에 Disk(하드)에서 불러오는 DB보다 훨씬 속도가 빠릅니다. 그렇기 때문에 Redis로 캐시 작업을 하기에 용이합니다. 하지만 Redis에 많은 데이터가 누적이 된다면 메모리 부족 현상이 순시 간에 나타날 수 있습니다. 그렇기 때문에 TTL(time-to-live)이라 부르는 '만료시간'을 설정하여 일정 시간이 지나면 자동으로 삭제되게끔 설정할 수 있습니다. Redis 설치 (Mac) Redis를 아직 설치하지 않으셨다면, 터미널에 아래 명령어를 쳐서 간.. 2023. 12. 20.
자바 인터페이스 의미, 특징, 선언, 구현 방법 (interface) 안녕하세요, 스코리아입니다. 오늘은 자바 인터페이스의 의미와 특징, 선언, 구현 방법에 대해서 알아보겠습니다. 인터페이스 의미와 역할 개발 코드와 객체가 서로 통신하는 접점 개발 코드는 객체의 내부 구조를 알 필요가 없고 인터페이스의 메소드만 알고 있으면 됨 개발코드가 객체를 종속되지 않게 하여 객체를 교체할 수 있음 개발 코드 변경 없이 리턴값 또는 실행 내용이 다양해짐 (다형성) 인터페이스 특징 인터페이스의 모든 메소드는 추상 메소드로 선언됨 (public abstract) 인터페이스의 모든 변수는 상수로 선언됨 (public static final) 인터페이스 선언 우선 인터페이스를 선언하는 방법은 다음과 같습니다. public interface 인터페이스명{ // 인터페이스 } 인터페이스에는 상수.. 2023. 9. 21.
자바 추상클래스 의미, 구현 방법 (abstract class) 안녕하세요, 스코리아입니다. 오늘은 자바 추상 클래스의 의미와 구현방법에 대해서 알아보겠습니다. 추상 (abstract)이란? 어원적 의미: 실체들 간에 공통되는 특성을 추출한 것 예: 삼성, 현대, LG를 통틀어 "회사"라 함 추상 클래스 (abstract class)란? 실체 클래스(객체를 만들어 사용할 수 있는 클래스)들의 공통되는 필드와 메소드를 정의한 클래스 추상 클래스는 실체 클래스의 부모 클래스 역할을 할 수 있음 (실체 클래스 -> 상속-> 추상 클래스) 추상 클래스 특징 구현 코드 없이 메소드의 선언만 있는 추상 메소드(abstract method)를 포함한 클래스 abstract 예약어 사용 추상 클래스는 단독으로 객체를 생성할 수 없고, 부모 클래스로만 사용 가능 (인스턴스화 불가) .. 2023. 9. 8.
자바 강제타입변환(다운케스팅 형변환) 의미, 사용방법 안녕하세요, 스코리아입니다. 오늘은 자바의 강제타입변환(다운케스팅 형변환)의 의미와 사용방법에 대해서 알아보겠습니다. 이전 시간에 포스팅한 자바의 자동타입변환에 대해서 모르신다면, 아래의 내용을 꼭 참고해 주시기 바랍니다. [이전 내용] 자바 자동타입변환(업케스팅 형변환) 알아보기: https://skorea6.tistory.com/22 강제 타입변환 의미, 특징? 의미 : 부모 타입을 강제적으로 자식 타입으로 변환 (자동적 X) 조건 : 자식 타입이 부모타입으로 자동 변환된 이후, 다시 자식 타입으로 변환할 때만 가능 (부모 타입으로 생성된 인스턴스를 바로 자식 타입으로 변환하는 것은 불가) 필요한 경우 : 자식 타입이 부모타입으로 자동 변환되면, 부모 타입에 선언된 필드와 메소드만 사용 가능. 이에 .. 2023. 9. 6.
[프로그래머스] 의상 문제 (Java Hash 풀이) 안녕하세요, 스코리아입니다. 오늘은 자바(Java)의 Hash(해시)를 이용한 프로그래머스 Lv.2 의상 문제를 풀어보겠습니다. 문제 설명 https://school.programmers.co.kr/learn/courses/30/lessons/42578 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 각 종류별로 최대 1가지 의상만 착용 가능 착용할 수 있는 의상의 경우의 수를 구하는 문제 아예 옷을 안 입는 경우는 없음 (최소 1개의 의상은 입음) [의상의 이름, 의상의 종류]로 이루어진 clothes 배열이 주어짐 같은 이름을 가진 의상은 존재하지 않음.. 2023. 9. 4.