분류 전체보기 61

Null 처리

NullKotlin에서 Null 처리는 주요한 특징 중 하나로, 안전한 Null 처리를 통해 NPE 문제를 효과적으로 예방할 수 있습니다. 해당 특징에 대해 깊이 있게 설명해보겠습니다.Nullable, Non-NullableKotlin은 모든 변수와 타입을 Nullable, Non-Nullable으로 명확히 구분하는 특성이 있습니다.Nullable는 null 값을 가질 수 있는 반면에 Non-Nullable은 null 값을 가질 수 없습니다.//null 불가, null을 넣을 시 컴파일 에러val name1: String = "name1"//null 가능val name2: String? = null 안전 호출 연산자 - ?.?. 연산자는 Nullable 타입에서 안전하게 접근할 수 있도록 돕는 안전 호출..

만들면서 배우는 클린 아키텍처

계층형 아키텍처의 문제는 무엇일까?그림 1. 전통적인 웹 애플리케이션 구조 웹 계층 : 요청을 받아 도메인 혹은 비즈니스 계층에 있는 서비스로 요청을 보낸다.도메인 계층 : 필요한 비즈니스 로직을 수행하고, 도메인 엔티티의 현재 상태를 조회하거나 변경하기 위해 영속성 계층의 컴포넌트를 호출한다.영속성 계층 : 엔티티를 조회 또는 변경한다.계층형 아키텍처는 견고한 아키텍처 패턴이다. 계층을 잘 이해하고 구성한다면 웹 계층이나 영속성 계층에 독립적으로 도메인 로직을 작성할 수 있다. 원한다면 도메인 로직에 영향을 주지 않고 웹 계층과 영속성 계층에 사용된 기술을 변경할 수 있다. 기존 기능에 영향을 주지 않고 새로운 기능을 추가할 수도 있다. 잘 만들어진 계층형 아키텍처는 선택의 폭을 넓히고, 변화하는 요구..

ETC 2025.04.22

맞춤 추천 게시글 시스템 구축 - 구현 2편

이 전에 작성했던 맞춤 추천 게시글 시스템 구축 - 구현 1편에 이어서 구현 2편을 진행해보겠습니다. 해당 시스템에는 레디스를 적용할 계획입니다. 레디스의 목적은 추천 게시글 목록이 이미 존재한다면 해당 데이터를 리턴하고, 추천 게시글 목록이 존재하지 않으면 레디스에 저장해서 관리하기 위함입니다. 레디스 설정파일은 다음과 같습니다. 유저 ID를 Key로 게시글 ID 리스트를 Value로 가진 자료구조로 저장해보겠습니다.@Configuration@EnableCachingclass RedisConfig( @Value("\${redis.host}") private val host: String, @Value("\${redis.port}") private val port: Int) { ..

기술 회고 2025.04.19

맞춤 추천 게시글 시스템 구축 - 구현 1편

이 전에 작성했던 맞춤 추천 게시글 구축 - 이론편을 기반으로 구현편을 이어서 진행하도록 해보겠습니다.기술 스택 버전Spring Boot : 3.4.4Kotlin : 1.9JDK : 21MySQL : 9.2.0Spring Data JPA : 3.4.4Kotlin JDSL : 3.5.5Coroutine : 1.8.1테이블 설계가장 먼저 테이블이 필요하므로 최대한 간단하게 설계를 진행해보겠습니다. 필요한 테이블로는 '사용자', '게시글', '사용자 게시글 활동 이력' 테이블이 있습니다.User(사용자) 테이블@Entityclass User( @Id @GeneratedValue(strategy = jakarta.persistence.GenerationType.IDENTITY) var id: L..

기술 회고 2025.04.17

맞춤 추천 게시글 시스템 구축 - 이론편

요즘 많은 서비스가 사용자 맞춤 추천을 통해 관심 있는 콘텐츠를 효과적으로 제공하고 있습니다. 이번 글에서는 간단한 방법으로 맞춤 추천 게시글 시스템을 구축하는 기본 개념과 구현 방법에 대해 살펴보겠습니다. 이번 포스팅에서는 이론적인 부분에 대해서 집중적으로 정리해보겠습니다. 대표적인 추천 방식추천 방식의 대표적인 방식으로는 컨텐츠 기반 추천 시스템과 협업 필터링 추천 시스템이 있습니다. 해당 방식의 장점과 단점을 테이블로 정리를 해보겠습니다. 구분 장점 단점컨텐츠 기반 추천 시스템• 신규 사용자·아이템에도 강함(콜드 스타트 완화)• 외부 사용자 데이터 필요 없음 → 프라이버시 이슈 적음• 추천 근거(아이템 특징) 설명이 쉬움• 아이템 특징 추출·정규화가 필요(텍스트 전처리, 태그 관리 등)• 사용..

기술 회고 2025.04.17

[TCP/IP가 보이는 그림책] 8. 보안

통신에 숨어있는 위험'다른 컴퓨터와 연결된다'는 것은 편리한 반면, 다양한 위험도 따른다는 것을 잊어서는 안 됩니다.편리와 위험은 이웃사촌네트워크에 접속해서 다른 컴퓨터와 통신할 수 있다는 것은 무척 편리합니다. 하지만 외부와 연결되어 있는 환경에서는 악의를 갖고 있는 제3자로부터 다음과 같은 피해를 받을 위험이 도사리고 있습니다.패킷을 도둑맞는다도청 : 통신 중 패킷이 부정한 방법으로 복사되어서 개인 정보를 도둑맞는 것을 말합니다.변조 : 통신 중 패킷을 도둑 맞아서 정보가 부정한 방법으로 변조되는 것을 말합니다.외부로부터 공격받는다부정 액세스 : 다른 사람의 컴퓨터에 허가 없이 침입하는 것을 말합니다.DOS/DDOS 공격 : 서버 등에 모두 처리할 수 없는 양의 패킷을 보내서 기능을 마비시키는 것을 ..

네트워크 2025.04.16

[TCP/IP가 보이는 그림책] 7. 라우팅

라우팅목적지의 컴퓨터가 동일한 네트워크 내에 있다고는 할 수 없습니다. 패킷을 다른 네트워크로 이동시키는 것은 라우터의 역할입니다.라우팅서로 다른 네트워크 간의 통신에서 패킷은 여러 개의 라우터를 경유하여 목적지에 도달합니다. 이 때 라우터가 수행하는 목적지까지의 경로 결정을 라우팅이라고 합니다. 라우팅을 수행하기 위해 라우터는 라우팅 테이블이라는 정보를 갖고 있습니다. 회수한 패킷의 수신 IP 주소를 보고 라우팅 테이블을 참고로 다음에 어떤 라우터에게 전송할지를 결정합니다.라우팅 테이블라우팅 테이블은 주로 다음과 같은 항목으로 구성되어 있습니다.수신 네트워크 : 라우터가 파악하고 있는 네트워크의 네트워크 주소와 서브넷 마스크가 들어갑니다.넥스트 홉 주소 : 1의 네트워크에 전달하기 위한 다음 전송처가 ..

네트워크 2025.04.16

[TCP/IP가 보이는 그림책] 6. 데이터 링크 계층과 물리 계층

데이터 링크 계층의 역할네트워크 계층 아래에 위치하는 데이터 링크 계층의 역할을 소개합니다.네트워크 간의 차이를 흡수한다.기기끼리 연결하는 데에는 몇 가지 방법이 있으며, 동일한 방법으로 연결된 한 덩어리의 기기를 데이터 링크라고 합니다. 데이터 링크 간의 차이를 흡수하고, 네트워크 계층보다 위에 있는 계층이 그 차이를 의식하지 않고 작동할 수 있도록 하는 것이 데이터 링크 계층의 역할입니다.네트워크 계층과 물리 계층의 중개자데이터 링크 계층에서는 데이터에 헤더를 붙인 것을 프레임이라고 합니다.데이터 링크 계층의 프로토콜데이터 링크 안에서 데이터를 어떻게 주고받을지를 결정하는 것이 데이터 링크 계층의 프로토콜입니다. 데이터 링크 내에서 기기를 식별할 필요가 있을 때는 MAX 주소를 사용합니다. 데이터 링..

네트워크 2025.04.16

[TCP/IP가 보이는 그림책] 5. 네트워크 계층

네트워크 계층의 역할TCP/IP 통신의 핵심을 담당하는 네트워크 계층의 주요 역할에 대해 소개합니다.네트워크 계층의 위치네트워크 계층은 다른 계층과 달리 주된 프로토콜이 IP 하나밖에 없습니다.통신 방법의 차이를 흡수네트워크 계층에는 통신 방법의 차이를 흡수하는 기능이 있습니다. 이에 의해 통신 방법이 다른 네트워크 상에 있는 컴퓨터끼리도 주고받기가 가능하게 되는 것입니다.통신 상대를 지정네트워크 계층은 '누가 누구에게 전달할지'라는 통신에 있어서 가장 중요한 정보를 다루고 있습니다. 통신 상대를 정하기 위해서 네트워크상에 존재하는 모든 기기에는 고유의 주소 같은 것이 할당되어 있습니다.목적지까지의 경로를 결정목적지 컴퓨터까지의 경로는 하나만 있다고 한정할 수 없습니다. 목적지까지의 경로가 여러 개 있는..

네트워크 2025.04.14

[TCP/IP가 보이는 그림책] 4. 트랜스포트 계층

트랜스포트 계층의 역할트랜스포트 계층의 역할과 주요 프로토콜을 소개합니다.트랜스포트 계층의 위치트랜스포트 계층은 애플리케이션 계층과 네트워크 계층의 중개 역할을 합니다.상대에게 전달한다데이터가 항상 확실히 전달된다고는 할 수 없으므로 문제가 발생한 경우에는 뭔가 대처 방안이 필요합니다. 이 때 통신 서비스에 맞는 방법으로 그것을 처리하는 것이 트랜스포트 계층의 역할입니다.신뢰성이냐 속도냐?트랜스포트 계층에는 TCP와 UDP라는 두 개의 프로토콜이 있습니다. TCP는 신뢰성을, UDP는 속도를 중시한 프로토콜입니다. 애플리케이션의 현관목적하는 애플리케이션 프로토콜에 데이터를 확실히 넘겨줄 수 있도록 각각 개별 현관문을 준비하고 있습니다.애플리케이션 계층의 출입구애플리케이션 계층에는 애플리케이션 프로토콜마다..

네트워크 2025.04.14