전체 글 385

Thread safety

프로그램을 실행하면 OS로부터 실행에 필요한 자원을 할당받아 프로세스가 된다. 쓰레드는 프로세스를 구성하는 것 중 하나이다. 프로세스의 자원을 이용하여 실제로 작업을 수행하는 역할이다. 모든 프로세스에는 하나 이상의 쓰레드가 존재한다. 쓰레드가 하나일 때 싱글 쓰레드, 둘 이상일 때 멀티 쓰레드라고 부른다. 멀티 쓰레딩의 장점으로는 CPU의 사용률을 향상시키고, 자원을 보다 효율적으로 사용할 수 있고, 사용자에 대한 응답성이 향상되고, 작업이 분리되어 코드가 간결해진다는 점 등이 있다. 그러나 이에 장점만 있는 것은 아니다. 하나의 쓰레드에 문제가 생기면 전체 프로세스에 영향을 주기도 하며, 쓰레드를 많이 생성할 경우 잦은 전환(Context Swiching)으로 인해 성능 저하가 발생할 수 있다. 또 ..

Java 2024.01.17

트랜잭션 스크립트 패턴과 도메인 모델 패턴

다양한 방식으로 로직을 처리할 수 있다. 그 중 대표적인 것은 트랜잭션 스크립트 패턴과 도메인 모델 패턴일 것이다. 트랜잭션 스크립트 패턴은 대부분의 애플리케이션에서 사용할 것이라고 예상되는데, 엔티티보다는 서비스 계층에서 비즈니스 로직을 처리한다. 반대로 도메인 모델 패턴은 엔티티에서 비즈니스 로직을 처리하며, 이 패턴에서 서비스 계층은 엔티티에 필요한 요청을 위임하는 역할을 한다. 이는 객체 지향의 특성을 적극적으로 활용하는 것이다. 두 패턴은 둘 중 하나만 선택해야 하는 것이 아니라 같이 활용할 수 있는 패턴이므로 상황에 맞게 쓰면 된다. 개인적으로는 트랜잭션 스크립트 패턴을 주로 사용했으며, 선호하는 방식이기도 하다. 그러나 도메인 모델 패턴을 접하고 난 뒤에는 각각의 장단점이 있으므로 한 가지 ..

설계 2024.01.15

[데이터베이스] 정규화와 반정규화

정규화(normalization)란 ERD 내에서 중복을 찾아 제거해 나가는 과정이다. 관계형 데이터베이스에서 동일한 정보는 한 곳에서만 관리해야 한다. 동일한 정보가 여러 곳에 중복하여 존재하면 정보가 일관되지 않는 등 여러 문제가 발생한다. 이론적으로는 5차 정규화까지 있지만, 대부분 3차 정규화까지만 실행한다. 정규화된 데이터 모델은 일관성, 정확성, 단순성, 비중복성, 안전성 등을 보장한다. 정규화 수준이 높을수록 유연한 데이터 구축이 가능하고 데이터의 정확성이 높아지는 반면 물리적 접근이 복잡하고 너무 많은 조인으로 인해 조회 성능이 저하된다. 정규화를 잘할 수 있게 되는 것도 중요하지만 정규화가 필요 없도록 모델링을 하는 것이 더 바람직하다. 실제로 정규화를 잘 이해하고 있는 설계자는 정규화를..

DB 2023.12.21

[리뷰 / 책] 데이터베이스 설계 및 구축

데이터베이스 설계 및 구축 / 오세종 / 생능출판 별점: ★★★★ (4 / 5) 가격: 23,000원 구입처: https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=315804216 팀 프로젝트를 진행하면서 데이터베이스에 들어갈 테이블과 컬럼을 설계해야 할 일이 있었다. 이전에도 설계해 본 적은 있었지만 개인 프로젝트를 하면서 다뤘던, 기껏 해봐야 세네 개 정도의 테이블을 다루던 때와는 달랐다. 팀 프로젝트로 넘어가면서 규모가 커져 테이블이 열 개를 넘기자 관계 설정 등이 복잡해지며 어려움을 겪었다. 설계하기 전 이 책을 읽었다면 좀 더 나은 설계를 할 수 있지 않았을까 싶은 생각이 든다. 입문자를 위한 책이며, 전공 학부생을 위한 강의용으로 쓰이는 듯 보인다. 데이..

리뷰/책 2023.12.20

자바의 실행 과정

자바 언어로 프로그래밍을 하기 위해서는 자바 개발도구(Java Development Kit, JDK)가 필요하다. JDK에는 자바 가상 머신(Java Virtual Machine, JVM)과 자바 클래스 라이브러리(Java API) 등 자바 개발에 필요한 프로그램이 설치된다. JDK의 bin 디렉토리에 있는 주요 파일은 다음과 같은데, 자바를 다루는 과정에 이용된다. 'javac.exe'는 자바 컴파일러로, 자바 소스 코드를 바이트 코드(JVM이 이해할 수 있는 기계어로, 바이트 코드를 해당 OS의 기계어로 변환하여 OS로 전달하는 역할)로 컴파일한다. 'java.exe'는 자바 인터프리터로, 컴파일러가 생성한 바이트 코드를 해석하고 실행한다. .java의 실행 과정은 다음과 같다. 1. 개발 도구를 이..

Java 2023.12.11

[네트워크] OSI 7계층과 TCP/IP

OSI 7계층이란, ISO(International Organization for Standardization, 국제표준화기구)에서 제안한 통신 규약(Protocol, 프로토콜)이다. 다양한 컴퓨터 간 데이터 전송을 지원할 수 있는 추상 모델을 표준화한 것으로 OSI 7 layer 또는 OSI 7계층으로 불린다. 프로토콜이란 서로 다른 기기들 간의 데이터 교환을 원활하게 수행할 수 있도록 표준화한 통신 규약이다. 통신을 제어하기 위한 표준 규칙과 절차의 집합으로 하드웨어와 소프트웨어, 문서를 모두 규정한다. 프로토콜의 기본 요소에는 전송하고자 하는 데이터의 형식, 부호화, 신호 레벨 등을 규정하는 구문(Syntax)과 두 기기 간의 효율적이고 정확한 정보 전송을 위한 협조 사항과 오류 관리를 위한 제어 ..

객체 지향 프로그래밍

객체 지향 프로그래밍(Object-Oriented Programming, OOP)이란, 프로그램을 객체의 모임으로 구성하여 객체 간 상호작용을 통해 개발하고 구현하는 방법론 중 하나이다. 주요 언어로는 Java, C++, Python, Ruby 등이 있다. 절차 지향 프로그래밍과 반대된다. 객체 지향 프로그래밍의 장점으로는 소프트웨어의 재사용 및 확장이 용이하여 고품질의 소프트웨어를 빠르게 개발할 수 있고 유지보수가 쉽다. 복잡한 구조를 단계적·계층적으로 표현하고, 멀티미디어 데이터 및 병렬 처리를 지원한다. 현실 세계를 모형화하므로 사용자와 개발자가 쉽게 이해할 수 있다. 객체 지향 프로그래밍의 특징으로는 캡슐화(Encapsulation), 상속(Inheritance), 다형성(Polymorphism)..

설계 2023.12.07

[리뷰 / 책] 객체지향의 사실과 오해

객체지향의 사실과 오해 / 조영호 / 위키북스 별점: ★★★★ (4 / 5) 가격: 20,000원 구입처: https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=60550259 자바를 처음 배울 때, 객체를 붕어빵 틀에 비유하는 설명이 많았다. 하지만 이것만으로는 객체의 전부를 표현할 수는 없다. 특히 나처럼 비전공자의 경우 관련한 지식이 없기 때문에 피상적인 설명에 오해가 생길 수도 있다. 따라서 객체를 추상적인 개념정도로만 이해하고 있는 사람 혹은 객체를 좀 더 명확하게 이해하고 싶은 사람에게 추천하고 싶다. 부제가 '역할, 책임, 협력 관점에서 본 객체지향'인데 이에 어울리게 다양한 예시로 비유하여 객체를 설명한다. 크게는 이상한 나라의 앨리스에 등장하는 인물들..

리뷰/책 2023.12.06

[리뷰 / 책] 컴퓨팅의 정수

컴퓨팅의 정수 / 우쥔 지음, 신준기 옮김 / 제이펍 별점: ★★★ (3 / 5) 가격: 26,000원 구입처: https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=321396895 미리 말하자면 끝까지 다 읽지는 못했다. 앞으로도 다 읽지 못할 것이라는 생각이 들어서 쓴다. 이 책을 살 때까지는 알고리즘과 코딩테스트 풀이에 실낱같은 희망을 가지고 있었으나, 현재로서는 무참히 패배했다는 말 외에 표현할 길이 없다. 어떻게든 완독 해보고자 2/3 지점까지 읽었으나 이해한 부분이 절반도 되지 않는다는 것을 깨닫고 책을 놓았다. 이 책을 산 두 번째 이유는 디자인이다. 표지에 혹했고 내부 디자인 역시 깔끔한 편이다. 여담이지만 폰트가 탐날 정도. 그래서 정말정말 읽지 않..

리뷰/책 2023.11.29

[리뷰 / 책] 스프링 프레임워크 첫걸음

스프링 프레임워크 첫걸음 / 주식회사 후루네스 키노시타 마사아키 지음, 전민수 옮김 / 위키북스 별점: ★★★ (3 / 5) 가격: 25,000원 구입처: https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=301096602 초판 발행이 22년 9월 21일로 꽤 따끈따끈한 책이다. 스프링 프레임워크 입문서로, 스프링을 다루면서 만나게 될 여러 개념에 대해 배울 수 있다. 중간중간 배운 내용을 실습하고 마지막에는 실제로 프로젝트를 생성하여 간단한 프로그램을 만들어보기도 한다. 설명은 친절하나 개념에 깊이감이 부족하다. 특정 개념별 최소한의 정보만을 담고 있다고 볼 수 있다. 조금 더 알려줬으면 하는 바람. 내용 선별에 선택과 집중이 필요해 보인다. 또 전체적인 책의 ..

리뷰/책 2023.11.22