전체 글 128

MongoDB vs MySQL 쿼리 비교하기

MySQL과 MongoDB는 데이터를 조작하는 방식에서 근본적인 차이를 보인다.MySQL 은 전통적인 SQL 쿼리 언어를 사용하는 반면, MongoDB는 API 호출 방식의 접근법을 취한다.이 글에서 실제 개발에서 자주 사용되는 쿼리를 비교하며 각각의 특징과 장단점을 살펴본다.1. 데이터 삽입 (INSERT)MySQL 방식INSERT INTO users(id, name, department) VALUES(1001, '김철수', '컴퓨터'); MongoDB 방식db.users.insertOne({ id: 1001, name: "김철수", department: "컴퓨터"}); 핵심 차이점MySQL : 구조화된 쿼리 언어전통적인 SQL 문법 사용테이블과 컬럼 구조가 명확히 정의됨INSERT, VALUES..

mongoDB 2025.07.07

2-1 텍스트 어드벤처 _2

클래스를 안전하게 변경하기 위해서는 테스트 코드가 중요하다. 리팩토링이 무서운 당신에게: 테스트로 안전하게 코드 개선하기"이 코드를 건들리면 뭔가 망가질 것 같은데.." 혹시 이런 생각을 해본적이 있나요?리팩토링에 대한 두려움을 극복하고, 테스트를 통해 안전하게 코드를 개선하는 방법을 알아보자. 리펙토링, 왜 무서울까?리펙토링(Refactoring)은 프로그램의 기능은 그대로 유지하면서 이해하고 내부 구조만 개선하는 작업이다. 쉽게 말해:기능은 동일코드는 더 깔끔하고 이해하기 쉽게유지보수성 향상 그런데 왜 많은 개발자들이 리팩토링을 두려워할까?답은 간단하다. 내부 구조를 바꾸다 보니 버그가 생길 가능성이 높기 때문이다.리팩토링의 든든한 안전장치 : 테스트그렇다면 어떻게 안전하게 리팩토링 할 수 있을까..

객체지향 2025.06.27

자바 람바(Lambda), 왜 써야할까? 코드 리펙토링으로 이해하는 매개변수화

자바 개발을 하다보면 비슷한 코드가 반복되거나, 코드 블럭을 파라미터처럼 전달하고 싶을 때가 있다.자바 8 에서 등장한 람다(Lambda)는 바로 이런 상황에서 빛을 발한다.이 글에서는 람다가 왜 필요한지, 그리고 어떻게 코드가 리펙토링 되는지를 예제를 통해 설명한다. 리팩토링의 핵심: 변하지 않는 것과 변하는 것을 분리하라 프로그래밍에서 중복을 제거하고, 좋은 코드를 유지하는 핵심은 변하는 부분과 변하지 않는 부분을 분리하는 것이다.변하지 않는 부분은 그대로 유지하고 변하는 부분을 어떻게 해결할 것 인가에 집중하면 된다. [1단계] 값 매개변수화 (Value Parameterization)리펙토링 전package lambda.start;public class Ex0Main { public stat..

카테고리 없음 2025.06.21

Spring 외부 설정값 주입 방법 총정리 : Environment, @Value, @ConfigurationProperties 비교

스프링 부트를 사용하면 application.yml 또는 application.properties 파일에 설정값을 정의하고, 이를 코드에 주입받을 수 있다.이번 포스팅은 설정을 주입하는 주요 3가지 방법을 정리하고, 그 특징과 장단점을 비교한다. 외부 설정 사용 - Environment다음과 같은 외부 설정들은 스프링이 제공하는 Environment를 통해서 일관된 방식으로 조회할 수 있다. 외부 설정의 종류설정 데이터 (application.properties)OS 환경변수자바 시스템 속성커맨드 라인 옵션 인수다양한 외부 설정 읽기스프링은 Environment는 물론이고 Environment를 활용해서 더 편리하게 외부 설정을 읽는 방법들을 제공한다. 스프링이 지원하는 다양한 외부 설정 조회 방법En..

Spring 2025.06.11

외부설정과 프로필

외부 설정이 필요한 이유애플리케이션을 개발하다 보면 운영 환경과 개발 환경이 서로 다른 설정값을 요구하는 경우가 많다.개발 환경: 개발 서버, 개발 DB 사용운영 환경: 운영 서버, 운영 DB 사용각각의 환경에 따라서 서로 다른 설정값이 존재한다.예를 들어 DB 접속 URL만 해도 환경에 따라 다를 수 있다. 개발: dev.db.com운영: prod.db.com 잘못된 접근 방식: 환경별로 빌드 결과물을 나누는 것초기에는각각의 환경에 맞게 애플리케이션을 빌드하는 것이다.개발 환경용 app-dev.jar, 운영 환경용 app-prod.jar 등 환경마다 서로 다른 빌드 결과물 생성환경에 따라 변하는 설정값을 내부에 포함개발 환경에는 dev.db.com 이 필요하므로 이 값을 애플리케이션 코드에 넣은 다음에..

Spring 2025.06.07

5-1 단일 책임 원칙

https://newfangled.tistory.com/164 값 객체(Value Object)를 사용해야 할 때 – Game 클래스 리팩터링 예시작은 클래스, 단순한 구조, 더 명확한 의도 표현들어가며작고 단순한 클래스를 만들기 위해 값 객체(Value Object) 를 활용할 수 있다.이번 글에서는 "게임 매출 관리 애플리케이션" 을 예시로,값 객newfangled.tistory.com 클래스를 분리하는 두 가지 방법이 있다.값 객체 (지난 포스팅 참고)단일 책임 원칙단일 책임 원칙을 사용해 클래스를 분리해보자. 예제 - 반복 일정 관리반복적인 일정을 관리하는 애플리케이션한달에 한번씩 반복되는 일정을 등록할 수 있다. 예를 들어, 월간 회의를 매달 두 번째 주 월요일 오후 2시부터 1시간까지 반복일..

JAVA 2025.05.29

값 객체(Value Object)를 사용해야 할 때 – Game 클래스 리팩터링 예시

작은 클래스, 단순한 구조, 더 명확한 의도 표현들어가며작고 단순한 클래스를 만들기 위해 값 객체(Value Object) 를 활용할 수 있다.이번 글에서는 "게임 매출 관리 애플리케이션" 을 예시로,값 객체를 언제, 왜 사용하는지 그리고 참조 객체(Reference Object)와의 차이점을 소개한다게임 매출 관리 애플리케이션요구사항: 게임의 판매현황과 매출을 관리한다.게임은 판매 가능한 상품이다.판매자로 등록한 사용자는 시스템에 게임을 등록하고 판매할 수 있다.애플리케이션은 등록된 게임의 매출 정보를 관리해야한다.이때 중요한 점은 매출이 각각의 게임별로 관리된다는 점이다.게임을 하나당 하나의 매출(Sales) 객체가 생성되어야 한다.package reference;public class Game {..

객체지향 2025.05.21

네트워크 예외 - 종료

TCP 에는 2가지 종류의 종료가 있다.정상 종료강제 종료 정상 종료TCP 에서 A, B 가 서로 통신한다고 가정해보자.TCP 연결을 종료하려면 서로 FIN 메시지를 보내야한다.A (FIN) -> B : A 가 B 로 FIN 메시지를 보낸다.A socket.close() 를 호출하면 TCP 에서 종료의 의미인 FIN 패킷을 상대방에게 전달한다.FIN 패킷을 받으면 상대방도 socket.close() 를 호출해서 FIN 패킷을 상대방에게 전달한다. 클라이언트와 서버가 3-way-handshake 로 연결되어 있다.서버가 연결 종료를 위해 socket.close() 를 호출한다.서버는 클라이언트에 FIN 패킷을 전달한다.클라이언트는 FIN 패킷을 받는다.클라이언트의 OS 에서 자동으로 FIN 에 대한 ..

Network 2025.05.12

JPA 에서 준영속 상태란? 실무에서 왜 중요할까?

JPA를 사용하다 보면 "준영속 상태"라는 개념을 접하게된다. 처음엔 어렵게 느껴지지만, 실무에서 엔티티를 수정할 때 꼭 이해하고 넘어가야 할 개념이다. 이번 글에서는 준영속 상태가 무엇인지, 왜 중요한지, 그리고 실무에서는 어떻게 다뤄야 하는지 알아보자.엔티티란?JPA 에서 Entity 는 데이터베이스 테이블에 매핑되는 자바 클래스를 의미한다.@Entity, @Id 애노테이션을 통해 정의하며, 하나의 객체 인스턴스는 테이블의 한 row를 의미한다.@Entitypublic class Book { @Id private Long id; private String name; private int price; // 기타 필드 및 getter/setter 생략} 특징엔티티는 Enitit..

JPA 2025.05.08

버퍼(Buffer)와 I/O 최적화

웹/애플리케이션 개발뿐 아니라 저수준 시스템 프로그래밍에서도 성능은 늘 중요한 주제입니다.그중에서도 I/O(Input/Output) 작업과 버퍼(Buffer)의 역할은 성능 병목을 해소하는 핵심 키워드입니다. 1. I/O란?I/O는 컴퓨터의 내부 장치(CPU·메모리)와 외부 장치(디스크·네트워크) 사이에서 데이터를 주고받는 모든 작업을 말합니다.디스크 I/O: 파일 읽기/쓰기, 데이터베이스 액세스네트워크 I/O: HTTP 요청/응답, API 호출사용자 I/O: 키보드/마우스 입력, 터미널 출력디바이스마다 속도가 다르고, 외부 장치는 내부 메모리보다 훨씬 느리기 때문에 I/O는 큰 병목을 일으킬 수 있습니다.2. 버퍼(Buffer)란?**버퍼(Buffer)**는 **임시 저장소(Queue 형태)**로, ..

Network 2025.04.21