[Java Spring] COGO 개발일지 - Spring Security에서 JWT 인증 처리 방식 비교 (JwtAuthenticationFilter)
·
백엔드/Java + Spring
COGO 서버를 개발하며 JwtAuthenticationFilter를 구현하던 중 이전 프로젝트에서 작성했던 코드와 비교를 하며 궁금증이 생겼다.JwtAuthenticationFilter에서는 Jwt를 파싱해서 스프링 시큐리티에 인증 정보를 주입한다. 이때 데이터베이스를 확인하여 유저가 실제로 존재하는지 체크하고 인증 정보를 주입할까? 아니면 Jwt 토큰을 파싱해서 UserDto를 customOAuth2User(또는 UserDetails)에 넣고 인증정보를 주입할까? 에 대한 고민이 생겼고 어떤 방법이 옳은 방법인지, 혹은 각 방법에 어떤 장단점이 있는지 찾아보게 되었다. JWT 인증 필터에서의 접근 방식 비교JWT 토큰을 검증하고 인증 정보를 설정하는 JwtAuthenticationFilter에서 사용..
[Java Spring] COGO 개발일지 - 코드 중복 해결에 대한 고민 해결책 (DI, AOP, 어노테이션)
·
백엔드/Java + Spring
코드 중복 해결에 대한 고민과 최선의 해결책 코드를 보니 getUserNameByAuthentication 메소드가 여러 컨트롤러에 걸쳐 중복되고 있다. 이런 중복은 DRY(Don't Repeat Yourself) 원칙을 위반하는 전형적인 케이스다. 이런 상황에서 몇 가지 해결책을 생각해볼 수 있다.현재 상황 분석현재 각 컨트롤러에서 동일한 코드로 인증된 사용자의 이름을 가져오는 메소드를 반복 구현하고 있다. 이렇게 중복된 코드는:유지보수 어려움 - 한 곳에서 수정이 필요할 때 모든 곳을 찾아 수정해야 한다버그 발생 가능성 증가 - 일부만 수정하고 나머지는 놓칠 수 있다코드 품질 저하 - 불필요한 코딩으로 전체 코드베이스 비대화된다해결책들1. 유틸리티 클래스 만들기public class Authentic..
[42서울] inception 구현과 설명 (도커 이미지 설계하기)
·
대외활동/42서울
서론inception 과제는 도커를 활용해 여러 서비스를 컨테이너화하고, 직접 서버를 구축하는 프로젝트 프로젝트이다. 프로젝트를 올바르게 구현하면 웹 브라우저에서 login.42.fr 로 접속해서 워드프레스 서비스를 이용할 수 있다. 도커(Docker)를 사용하여 서비스별 컨테이너를 구성Docker Compose를 활용하여 컨테이너 간 연결 및 오케스트레이션보안 및 성능을 고려한 서버 환경 구성WordPress, MariaDB, Nginx 등 웹 서비스 인프라 구성   Docker, Docker Compose?도커와 도커 컴포즈에 대한 개념을 공부하고 과제를 시작하자.도커란?도커는 컨테이너(Container) 기술을 기반으로 애플리케이션을 쉽게 배포, 실행, 관리할 수 있도록 해주는 플랫폼이다.이전에 쓴..
[42서울] inception 도커의 개념 (가상환경, 볼륨, 동작 원리)
·
대외활동/42서울
도커는 애플리케이션을 격리된 컨테이너 환경에서 실행하여 개발과 운영의 효율성을 극대화하는 도구이다. 이번 글에서는 42서울 inception 과제 구현 및 평가 과정에서 배웠던 내용을 토대로 도커가 무엇인지, 왜 사용해야 하는지, 그리고 어떻게 동작하는지에 대해 정리해 보고, 특히 네트워크와 볼륨 관리 측면에서의 이점을 중점적으로 정리해 보았다.WHAT: 도커 & 서비스 배포도커 가상환경과 가상머신의 차이점가상머신(VM)가상머신은 하이퍼바이저를 통해 하드웨어를 가상화한 후, 그 위에 각기 다른 운영체제를 실행합니다.→ 무겁고 부팅 시간이 길며, 자원 소모가 큽니다.도커 컨테이너도커는 운영체제의 커널을 공유하면서, 애플리케이션을 격리된 컨테이너 내에서 실행합니다.→ 경량화되어 빠른 부팅과 효율적인 자원 사..
[42서울] cpp08 구현
·
대외활동/42서울
CPP08은 템플릿, STL (Standard Template Library), 그리고 반복자와 같은 C++ 개념을 다루는 과제이다. C++ 반복자(iterator)란?반복자(iterator)는 C++의 STL(표준 템플릿 라이브러리)에서 컨테이너의 요소를 순회(traverse)하거나 접근(access)하기 위해 사용되는 추상화된 포인터이다.컨테이너 내부 구현에 독립적이며, 배열이나 연결 리스트 같은 자료구조를 한 가지 방식으로 순회할 수 있게 해준다. 반복자의 역할반복자는 컨테이너의 첫 번째 요소부터 마지막 요소까지 순회하는 데 사용됩니다.STL 알고리즘(std::sort, std::find 등)은 반복자를 통해 컨테이너와 상호작용합니다.반복자는 컨테이너의 세부 구현을 감춥니다. (추상화) ex00#i..
[42서울] cpp07 구현
·
대외활동/42서울
cpp07은 c++의 template에 관한 과제이다. ex00#ifndef TEMPLATE_HPP# define TEMPLATE_HPPtemplate void swap(T &a, T &b){ T tmp; tmp = a; a = b; b = tmp;}template T min(T a, T b){ return (a T max(T a, T b){ return (a > b ? a : b);}#endif //TEMPLATE_HPP  함수 템플릿 (Function Template)함수 템플릿은 특정 데이터 타입에 독립적인 함수를 정의할 때 사용된다. 예를 들어, 두 값을 교환하는 함수를 작성할 때 int, float, string 등 모든 데이터 타입에 대해 동일한 코드를 중복 작..
[Kotlin] 8. 코틀린 DSL(Domain-Specific Language) 소개와 작성 방법
·
프로그래밍 언어/Kotlin
이번 글에서는 코틀린의 DSL(Domain-Specific Language)에 대해 알아보겠습니다. DSL은 특정 도메인에 특화된 언어로, 복잡한 작업을 간단하고 읽기 쉽게 표현하는 데 유용합니다. 코틀린은 DSL을 작성하기에 적합한 언어적 특성을 가지고 있어 매우 강력합니다.1. DSL이란?DSL은 특정 문제를 해결하거나 특정 도메인을 표현하기 위해 설계된 작은 언어입니다.예를 들어, SQL은 데이터베이스 작업을 위한 DSL이고, HTML은 웹 문서를 표현하기 위한 DSL입니다.DSL의 장점읽기 쉽고 직관적이다.도메인 전문가(개발자가 아닐 수도 있음)도 이해하기 쉽다.특정 문제를 해결하기 위한 코드를 간결하게 작성할 수 있다.2. 코틀린에서 DSL 작성하기코틀린은 다음과 같은 언어적 특성을 통해 DSL..
[Kotlin] 7. 코틀린의 코루틴과 비동기 프로그래밍
·
프로그래밍 언어/Kotlin
이번 글에서는 코틀린에서 비동기 작업을 효율적으로 처리할 수 있는 코루틴(Coroutines)을 다루어 보겠습니다. 코루틴은 비동기 프로그래밍을 쉽고 읽기 좋게 만드는 코틀린만의 강력한 기능입니다.1. 코루틴이란?코루틴은 경량 스레드라고 생각할 수 있습니다. 스레드보다 훨씬 가볍고 효율적이며, 수천 개의 코루틴을 동시에 실행할 수도 있습니다.(1) 주요 특징비동기 코드를 동기 코드처럼 작성할 수 있습니다.기본적으로 스레드 차단(blocking)이 없으므로 자원을 효율적으로 사용할 수 있습니다.suspend 함수를 사용해 중단 가능한 작업을 작성합니다.2. 코루틴 시작하기코틀린에서 코루틴을 사용하려면 kotlinx.coroutines 라이브러리를 추가해야 합니다.Gradle 설정:implementation..
[Kotlin] 6. 코틀린 확장 함수와 표준 라이브러리 활용
·
프로그래밍 언어/Kotlin
1. 확장 함수(Extension Function)확장 함수는 기존 클래스에 새로운 함수나 속성을 추가하는 방법입니다. 클래스 코드를 수정하지 않고도 메서드를 추가할 수 있어 매우 유용합니다.(1) 확장 함수 정의fun String.addExclamation(): String { return this + "!"}val greeting = "Hello"println(greeting.addExclamation()) // "Hello!"this는 확장 함수가 호출되는 객체를 나타냅니다.확장 함수는 기존 클래스의 멤버처럼 사용할 수 있습니다.(2) 확장 함수 활용문자열의 확장 함수fun String.isEmail(): Boolean { return this.contains("@") && this.co..
[Kotlin] 5. 컬렉션과 함수형 프로그래밍
·
프로그래밍 언어/Kotlin
이전 글에서는 코틀린의 클래스와 객체를 다뤘습니다. 이번에는 코틀린의 컬렉션(List, Set, Map)과 함수형 프로그래밍의 핵심인 람다식과 고차 함수를 배워 보겠습니다.1. 컬렉션(Collection)코틀린의 컬렉션은 크게 읽기 전용과 변경 가능으로 나뉩니다. 컬렉션에는 List, Set, Map이 포함됩니다.(1) 리스트(List)읽기 전용 리스트listOf로 선언하며, 요소를 변경할 수 없습니다.val fruits = listOf("Apple", "Banana", "Cherry")println(fruits[0]) // "Apple"println(fruits.size) // 3변경 가능한 리스트mutableListOf로 선언하며, 요소를 추가, 삭제, 변경할 수 있습니다.val fruits = mu..