- [ Dev/Book ][BOOK - 클린코드] Chapter 13. 동시성(Concurrency)2025-03-17 22:10:44이번 장에서는 소프트웨어 개발에서 가장 복잡하고 까다로운 영역 중 하나인 '동시성(Concurrency)'을 다룹니다.동시성 프로그래밍의 원칙과 패턴, 그리고 주의사항에 대해 설명합니다.동시성의 기본 개념동시성은 여러 작업이 동시에 진행되는 것처럼 보이는 프로그래밍 패러다임입니다. 이는 병렬성(Parallelism)과는 다른 개념입니다. 동시성은 단일 프로세서에서 여러 작업을 번갈아가며 수행함으로써 동시에 진행되는 것처럼 보이게 하는 반면, 병렬성은 실제로 여러 프로세서에서 작업을 동시에 수행합니다.동시성이 필요한 이유동시성이 필요한 주요 이유:응답성 향상: 사용자 인터페이스의 반응성을 높일 수 있습니다. 예를 들어, 긴 계산을 수행하는 동안에도 UI는 계속 반응할 수 있습니다.성능 향상: 현대 컴퓨터는..
- [ Dev/Book ][BOOK - 클린코드] Chapter 12. 창발성(Emergence)2025-03-16 21:01:51이 장에서는 어떻게 단순한 규칙들이 모여 복잡하고 우아한 설계를 '창발'시키는지에 대해 설명합니다. 💡 창발성의 개념 창발성이란 간단한 규칙들이 모여 복잡한 시스템을 만들어내는 현상을 말합니다. 마치 개미 한 마리는 단순한 규칙을 따르지만, 개미 군집은 놀랍도록 복잡하고 효율적인 시스템을 형성하는 것과 같습니다. 소프트웨어 설계에서도 몇 가지 간단한 설계 원칙들을 따르면 '좋은 설계'가 자연스럽게 창발된다는 것이 이 장의 핵심입니다. ">💡창발성의 개념창발성이란 간단한 규칙들이 모여 복잡한 시스템을 만들어내는 현상을 말합니다. 마치 개미 한 마리는 단순한 규칙을 따르지만, 개미 군집은 놀랍도록 복잡하고 효율적인 시스템을 형성하는 것과 같습니다. 소프트웨어 설계에서도 몇 가지 간단한 설계 원칙들..
- [ Dev/Book ][BOOK - 클린코드] Chapter 11. 시스템2025-03-16 20:52:06이 장은 코드 레벨을 넘어서 시스템 전체의 설계와 구조에 관한 중요한 원칙들을 다루고 있습니다.시스템 구축과 사용의 분리이 장의 핵심 원칙 중 하나는 '시스템 구축'과 '시스템 사용'을 명확히 분리해야 한다는 것입니다.소프트웨어 시스템은 애플리케이션 객체의 생성과 객체들의 의존성 연결을 '시작 단계'에서 처리하고, 그 후 '실행 단계'에서는 이미 준비된 객체들을 사용하는 방식으로 설계되어야 합니다. 이를 위한 여러 접근법이 소개됩니다:Main 분리: 모든 설정 로직을 main 함수나 main이 호출하는 모듈에 두어 나머지 시스템에서는 모든 객체가 적절히 구성되었다고 가정하게 합니다.팩토리(Factory): 객체 생성 로직을 팩토리 클래스로 분리하여 시스템이 필요할 때 객체를 생성하도록 합니다.의존성 주입..
- [ Dev/Book ][BOOK - 클린코드] Chapter 10. 클래스2025-03-16 18:35:45이전 장에서는 코드 행과 코드 블록을 올바르게 작성하는 방법, 함수 구현 방식, 그리고 함수 간의 관계에 대해 다뤘습니다. 이번 장에서는 한 단계 더 나아가, 깨끗한 클래스를 만드는 원칙에 대해 살펴봅니다.클래스 체계클래스를 정의할 때는 표준적인 자바 관례를 따르는 것이 좋습니다.변수 선언 순서public static final 정적 상수 → 맨 처음private static final 정적 비공개 변수 → 다음private 인스턴스 변수 → 그다음공개 변수는 거의 필요하지 않음메서드 선언 순서공개(public) 메서드가 가장 먼저비공개(private) 메서드는 자신을 호출하는 공개 메서드 직후에 배치이처럼 클래스 내부의 구성 요소를 논리적인 순서로 정리하면, 위에서 아래로 읽기 쉬운 구조(신문 기사처럼..
- [ Dev/spring-core ][Spring] AOP: 관점 지향 프로그래밍의 이해2025-03-16 18:06:02오늘은 Spring 프레임워크의 중요한 기능 중 하나인 AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)에 대해 알아보겠습니다. AOP는 객체 지향 프로그래밍(OOP)을 보완하는 프로그래밍 패러다임으로, 애플리케이션의 핵심 비즈니스 로직과 부가 기능을 깔끔하게 분리할 수 있게 해줍니다.AOP가 필요한 이유소프트웨어 개발에서 주로 비즈니스 로직에 집중합니다. 예를 들어 OrderService라는 클래스가 있다면, 주문 처리라는 핵심 기능에 집중해야 합니다. 하지만 실제 애플리케이션은 이런 핵심 기능 외에도 로깅, 보안, 트랜잭션 관리 등 여러 부가 기능들이 필요합니다.이러한 부가 기능들은 대부분 애플리케이션 전반에 걸쳐 사용되는 공통 관심사(cross-cutting conc..
- [ 활동 ]토스 10주년, 10to1002025-03-09 22:02:28토스 10주년 이벤트 행사에 다녀왔다.처음 행사 소식을 접하고 신청하려 했지만, 조기 마감으로 신청을 놓쳤다. 우연히 성수에 들렀다가 행사장을 발견했고, 현장에서 대기 후 세션에 참여할 수 있었다. 심지어 행사 장소도 걸어가다가 우연히 발견했다! 내가 들은 세션은 '개발자 커리어에 토스가 꼭 있어야 하는 이유'라는 주제로 발표한 박서진 연사님의 강연이었다.개발자로 성장하기 위해 필요한 태도와 마음가짐에 대한 좋은 내용이 많아서 이를 정리해 보았다. 박서진 연사님은 대학교 때부터 토스에서 커리어를 시작했고, 작은 팀에서부터 시작해 지금은 프론트엔드를 총괄하고 있다고 했다. 7년 차의 이른 나이에 높은 직급을 가진 연사님은 자신을 '코딩 천재'라고 표현했다. 어릴 적부터 관심이 많았고, 공부를 잘했다고..
- [ Dev/JPA ][JPA] 6. 연관관계 매핑 주의점2025-02-28 23:00:31이전 포스팅에서 연관관계 매핑에 대해서 자세히 알아보았다. 이번에는 실전 예제를 통해 직접 어떻게 동작하는지 확인해보자. ❌ 잘못된 방법) - 연관관계의 주인이 아닌 가짜 매핑에 데이터를 입력한 경우[MEMBER2 테이블]package hellojpa.mapping;import jakarta.persistence.*;@Entity(name = "MEMBER2")public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String username; ..
- [ Dev/Book ][BOOK - 클린코드] Chapter 9. 단위 테스트2025-02-28 17:00:10이전에는 TDD(Test Driven Development) 개념이 생소하였고, 단위 테스트란 '프로그램이 돌아간다'는 일회성 코드에 불과했다. 하지만 소프트웨어 분야가 발전하면서 테스트 코드의 중요성은 높아졌고, 지금은 꼬치꼬치 따지며 테스트 코드를 작성해야 한다. 이번 장에서는 테스트 코드를 아주 얕게 배워본다. 저자는 테스트 코드를 제대로 설명하려면 책 한 권으로도 부족하다고 한다. TDD 법칙 세 가지TDD(Test-Driven Development)는 테스트를 먼저 작성하고, 그 테스트를 통과하는 최소한의 코드를 작성하는 방식으로 소프트웨어를 개발하는 방법론이다. 일반적인 개발 방식과는 달리, 기능을 구현하기 전에 테스트를 먼저 작성하는 것이 핵심이다. 중요한 세 가지 법칙(Red-Green-R..