Hot Tomcat 환경설정 (server.xml) - 컨텍스트 경로 설정 톰캣이란? Tomcat은 많은 Java 개발자들이 사용하고 있는 웹 어플리케이션 서버입니다. Tomcat은 웹 어플리케이션이 동작하여 서버의 역할을 할 수 있도록 서블릿 컨테이너를 제공하며 서버 운영에 필요할 수 있는 여러 환경설정 기능을 지원합니다. 스프링 기반으로 생성한 어플리케이션은 기본적으로 별도의 톰캣 서버의 설치가 필요하며 서버의 실행을 위해서는 정해진 경로*에 운영할 웹 어플리케이션을 위치시킨 후 톰캣서버를 실행시켜야 합니다. 반면 스프링 부트는 기본적으로 톰캣서버를 내장하고 있으며 별다른 설정 없이 배포한 Jar 파일을 실행하여 웹서버를 구동할 수 있습니다. 스프링부트를 이용할 경우 내장톰켓을 통해 별다른 설정 없이 손쉽게 웹어플리케이션을 배포하고 서버를 운영할 수 있지만 아직 War 파일.. 댓글 0 2023.04.09 [Java api] Active Directory와 연결방법 (LDAP) Active Directory란? 사용자 정보를 저장하고 관리하는 데이터베이스의 한 유형으로 디렉토리 서비스의 한 유형이다. 친숙한 관계형 데이터베이스(MySQL, OracleDB 등)와 다르게 AD(Active Directory)는 도메인 네임 시스템(DNS)을 기반으로한 디렉토리 구조로 데이터를 저장/관리한다. * 이름을 기준으로 데이터에 손쉽게 접근할 수 있다. example) 저장되는 데이터의 name 예시 - 아래처럼 entry를 ,로 나열한 형태이다. CN=Jeff Smith,OU=Sales,DC=Fabrikam,DC=COM ('Fabrikam company 세일즈 팀 Jeff Smith'의 식별이름) 데이터 접근방식 - LDAP AD의 데이터에 접근하기 위해서는 LDAP 프로토콜을 사용한다... 댓글 0 2022.05.01 스프링 - 마이바티스 설정 (MySQL) Update - 2022.04.09 : springboot / spring framework 설정방식 구분 MyBatis란? 마이바티스는 개발자가 작성한 SQL 구문을 손쉽게 실행하고 결과를 조회할 수 있도록 돕는 프레임워크입니다. 필수 인터페이스 스프링에서 MyBatis를 사용하기 위해서는 SqlSessionFactory와 1개 이상의 Mapper 인터페이스가 필요합니다. Intro SqlSessionFactory가 생성하는 SqlSession이란? > DataBase에 SQL을 실행하기 위해 필요한 객체입니다. MyBatis에서 SQL 구문은 SqlSession을 통해 실행되며 쓰레드마다 별도의 SqlSession 인스턴스를 가집니다. (SqlSession 인스턴스는 쓰레드간 공유되지 않습니다.) S.. 댓글 0 2022.04.03 이전다음 New 개발자 - 커뮤니티의 중요성? 국비학원의 백엔드 코스를 수료하며 개발자 커리어를 시작했다.학원에서 학습한 내용을 통해 동기들과 함께 프로젝트를 만드는 과정은 흥미로웠다. 하지만, 거기까지였다. 개발자가 커뮤니티에 참여했을 때 경험할 수 있는 장점은 느끼지 못했기 때문이다. 개발자를 업으로 삼는 많은 사람들이 커뮤니티 참여를 추천하며, 나 역시 이에 같은 생각이다. 그 이유는 무엇일까? 그동안 겪었던 경험을 돌아보며 커뮤니티에 참여하며 가졌던 생각을 돌아본다. 모각코 스터디모각코는 '모여서 각자 코딩'의 줄임말로 정해진 장소에 모여서 각자 해야할 작업을 하는 스터디를 의미한다.이름 그대로 프로젝트를 위한 코딩을 할 수도 있지만 회사 업무, 인강 및 서적을 통한 개발 공부 등 개인 시간을 투자해야하는 작업을 함께 할 수 있다. 다양한.. 2025.04.06 [DB] 트랜잭션 이해하기 (동시성 이슈와 서비스의 경계) 데이터베이스 트랜잭션이란?데이터베이스 트랜잭션은 하나의 논리적 작업단위를 나타내는 작업들의 집합이다.'논리적 작업단위'는 사용자가 DBMS에 처리를 요구하는 기능으로 1개 이상의 작업으로 구성된다.간단한 예시로 이체 기능이 있다. '사용자 A가 사용자 B에게 1만원을 이체한다.' 라는 요구사항을 처리하는 과정은 다음과 같다. 1) 사용자 A의 잔고를 1만원을 차감한다.2) 사용자 B의 잔고에 1만원을 추가한다. 이 두 작업은 반드시 함께 성공하거나 함께 실패해야 하는데, 만약 A의 계좌에서 금액이 차감된 후 시스템 오류로 인해 B의 계좌에 금액이 추가되지 않는다면, 데이터의 일관성이 깨지게 되어 사용자들에게 혼란을 가져올 수 있다.트랜잭션은 이러한 상황을 방지하여 데이터베이스의 무결성을 보장한다. 트.. 2025.03.24 코드보다 테스트가 먼저 - TDD의 핵심 원리와 실제 구현 "코드를 작성하기 전에 테스트를 먼저 작성한다"위 문장은 작성된 코드가 없는 데 어떻게 테스트를 진행할 수 있는 지 의구심을 만들 수 있다.하지만 테스트 주도 개발(TDD, Test Driven Development)의 시작과 같은 말이며,많은 개발자들이 실제 코드를 작성하기 전에 테스트를 먼저 작성하는 방식으로 개발한다. 개발자들 사이에서 TDD는 왜 떠오르게 되었을까?이 글에서는 TDD가 무엇인지 간단하게 살펴보고 어떻게 적용되는지 확인해보도록 하자. TDD란?TDD는 테스트부터 시작한다. 구현을 먼저 하고 나중에 테스트하는 것이 아니라 먼저 테스트를 하고 그 다음에 구현한다. 구현된 기능이 없는데 어떻게 테스트를 진행할 수 있을까?TDD에서 '테스트를 먼저 한다'는 것의 의미는 기능이 올바르게 동.. 2025.03.16 패키지 구조 리팩토링 - 도메인 vs 레이어 "2024년, 한 해 동안 작성한 코드 중 변경하고 싶은 코드는 무엇일까?" 위 질문을 던졌을 때, 작년 초에 진행한 사이드 프로젝트의 패키지 구조가 가장 먼저 떠오른다. 도메인 주도개발 (DDD, Domain Driven Development)에 관심을 가진 상태에서 사이드 프로젝트를 진행했기 때문에 도메인 중심으로 패키지 구조를 설계 했다. 사이드 프로젝트는 단순한 기능을 제공하는 소규모 서비스였고 도메인 중심의 패키지 구조는 이런 소규모 서비스에 어울리지 않는다란 느낌을 주었다. 내부적으로 레이어드 아키텍처를 사용했기 때문에 도메인을 기준으로 패키지를 구성한 뒤 내부에 레이어를 위한 별도의 패키지를 구성하는 작업은 비효율적이었기 때문이다. 더 나은 패키지 구조를 적용하기 위해 '도메인 중심의 패.. 2025.03.09 네트워크의 통신과정 이해하기 네트워크는 컴퓨터 및 디바이스들 사이에서 데이터 전송을 위해 사용하는 연결망이다. 장치들 간의 연결은 단순하게 이루어지지 않고 데이터를 효율적으로 전달하기 위해 여러개의 중간 처리단계를 가지고 있다. 역할 관점에서 데이터를 요청하는 주체를 클라이언트, 데이터를 제공하는 주체를 서버라고하는데 클라이언트에서 서버까지 요청이 전달되는 과정을 살펴본다. 간단하게 생각할 수 있는 네트워크의 모습HTTP Request : “브라우저에서 무언가의 요구(리퀘스트)를 웹서버에 보낸다.”HTTP Response : “웹 서버는 요구에 따라 움직이고 결과(응답)를 브라우저에 돌려보낸다.” 브라우저에서 전송한 요청은 다음의 물리적 흐름을 통해 서버에 도달한다. 웹브라우저 - URL, Request Message프로토콜 스택.. 2025.02.23 대규모 서비스와 서비스의 규모 확장 전략 대규모 서비스대규모 서비스는 거대한 데이터를 처리할 수 있는 서비스를 의미한다. 거대한 데이터는 여러 상황들( 1. 다수의 등록된 사용자로 인한 대용량 데이터 처리가 필요한 경우 2. 특정 시간대에 사용자 접근이 집중되어 트래픽이 폭증하는 경우 3. 실시간 데이터 처리량이 매우 큰 경우 등)으로 해석된다. 즉, 거대한 데이터는 단순히 저장된 데이터의 크기뿐만 아니라, 처리해야 하는 데이터의 특성과 패턴에 따라 다양한 형태로 나타날 수 있다. 따라서, 이러한 데이터의 특성을 고려하지 않은 개발이 이루어질 경우, 시스템이 비효율적으로 구성되어 서비스 제공속도가 느려지거나 심각한 경우 전체 서비스의 장애로 이어질 수 있다. 소규모 서비스와 대규모 서비스의 차이목표한 기능의 구현에 초점을 맞추는 소규모 서비스.. 2025.01.31 [Java] JPA 이해하기 JPA란?JPA는 애플리케이션에서 관계형 데이터베이스를 객체지향적으로 사용할 수 있게 해주는 ORM(Object-Relational Mapping) 기술 표준이다. ORM(Object-Relational Mapping)은 객체와 관계형 데이터베이스를 매핑하여 데이터베이스 작업을 객체지향적으로 처리할 수 있게 해주는 기술이다. 데이터베이스의 테이블을 단순한 데이터 집합이 아닌, 하나의 객체 대상(entity)로 바라보고 다룰 수 있게 한다. 즉, 객체를 직접 저장하고 조회할 수 있게 해준다. 반면 MyBatis나 Spring JdbcTemplate과 같은 SQL Mapper는 단순히 SQL 쿼리를 Java 코드와 연결하는 것에 초점을 맞추고 있어 ORM과는 다른 접근 방식을 보여준다. JPA의 장점 J.. 2024.12.20 [항해 플러스 백엔드] 마지막 회고 11월 30일, 가을의 마지막 토요일에 10주간의 여정이 끝을 맺었다.토요일마다 발제 강의를 듣고 평일에는 발제 내용을 학습하는 게 일상이 되었는 데, 이제는 제출할 과제가 없어 어색하다.매주 피곤하고 힘들어서 빨리 자유가 오길 바랐지만, 막상 끝나고 나니 허탈하기만 하다. 목표를 이루었는가?처음 생각한 목표의 50%를 달성했다. 항해 플러스를 시작할 때, 10주 동안 이루어야 할 3가지 목표를 세웠다.모든 과제 제출하기매주 진행되는 발제 주제 정리하기코치분들의 개발 노하우 배우기 모든 과제 제출하기매주 발제와 함께 과제가 제공되고, 과제 통과율에 따라 배지를 받는다는 안내를 받았을 때부터 블랙배지를 목표로 삼았다.해당 주차의 교육내용을 완전히 이해해야 통과할 수 있다고 생각했기 때문에, 블랙배지는 .. 2024.12.11 [항해 플러스 백엔드] 9주차 회고 (WIL) 이번 한 주동안 카프카를 다루었다.새롭게 접한 기술이었기 때문에 사용되는 개념을 학습할 때는 이해가 잘 안되었지만 hello world를 만들고 필요한 기능을 구현하면서 이해도를 높일 수 있었다. 문제카프카의 주요 구성요소(Producer, Broker, Consumer)가 기능하는 프로세스를 이해했지만 공식문서만을 보고 구현하기는 어려웠다. 시도공식문서의 가이드에 따라 hello world를 구성해보았으나 진행과정을 제대로 따라가지 못했다. 가이드 문서에서 실행시키는 파일의 경로를 찾기 어려웠기 때문이다. 해결Youtube의 강의 영상을 찾아 해결할 수 있었다. Kafka를 검색하면 Kafka의 목적이나 기능에 대한 설명 영상 뿐만 아니라 설정 및 사용하는 방법을 다루는 강의 영상이 존재한다. 알게.. 2024.11.25 [항해 플러스 백엔드] 8주차 회고 (WIL) DB인덱스와 트랜잭션 분리에 대해 다루었던 지난 한 주도 어느 순간 끝이 났다. 1. 문제서비스가 제공하는 기능에 따라 트랜잭션의 범위는 다르다. 이번 과제는 서비스가 확대되어 서비스를 분리하게 될 경우 예상되는 문제를 어떻게 해결할지 설계하는 것이었다. 트랜잭션의 범위 때문에 서비스를 분리하면 트랜잭션의 문제가 발생하고 이를 해결하기 위해서는 '보상 트랜잭션'이 필요하다. 하지만 '보상 트랜잭션' 개념을 이번에 처음 듣게 되었다. 2. 시도잘 모르는 개념이기 때문에 단순 구글링을 통해 관련 정보를 찾아볼 수 밖에 없었다. 3. 해결보상 트랜잭션을 검색하면 연관해서 MSA 개념을 쉽게 찾을 수 있다. MSA(MicroService Architecture)에서 보장하는 보상 트랜잭션 방법을 참고해서 과제.. 2024.11.16 more