개발 일지 168

[Spring] 스프링 컨테이너

스프링 컨테이너는 스프링 프레임워크의 핵심 컴포넌트로, 스프링에서 자바 객체들을 관리하는 공간을 말한다. 개발자를 대신하여 내부에 존재하는 애플리케이션 빈(Bean)의 생명주기를 관리하며, 빈은 스프링에서 자바 객체를 의미한다. 즉, 컨테이너는 개발자가 정의한 빈을 객체로 만들어 관리하고 개발자가 필요로 할 때 제공한다. 스프링 컨테이너를 통해 원하는 만큼 많은 객체를 가질 수 있으며, 의존성 주입을 통해 애플리케이션의 컴포넌트를 관리한다. 이러한 특성으로 인해 다음의 효과를 얻을 수 있다. 모듈 간에 의존 및 결합으로 인해 발생하는 문제로부터 자유로울 수 있다. 메서드가 언제, 어디서 호출되어야 하는지, 메서드를 호출하기 위해 필요한 매개 변수를 준비해서 전달하지 않는다. 컨테이너는 크게 BeanFac..

[Spring] Spring Boot

Spring Boot는 엔터프라이즈 애플리케이션을 개발하기 위한 핵심 기능을 제공하는 Spring Project 중 하나이다. 즉, 스프링을 더 쉽게 이용하기 위한 도구라고 볼 수 있다. 스프링을 이용하여 개발할 때, 세팅해야할 요소가 많아서 스프링 기반 애플리케이션 개발을 시작하기도 전에 어려움을 겪는 문제를 Spring Boot를 통해 간단하게 프로젝트를 설정함으로써 해결할 수 있다. 장점 Spring Boot의 최대 장점은 다음과 같은 이유로 비즈니스 로직에만 집중할 수 있다는 것이다. XML 기반의 복잡한 설계 방식 지양 : Spring Boot 이전의 스프링 애플리케이션 개발을 위한 설정은 굉장히 복잡했는데 Spring Boot를 통해서 간단하게 설정할 수 있게 되었다. 의존 라이브러리의 자동 ..

[Spring] PSA

PSA(Portable Service Abstraction)란, 환경의 변화와 관계없이 일관된 방식의 기술로의 접근 환경을 제공하려는 추상화 구조이다. 객체지향 프로그래밍에서 어떤 클래스의 본질적인 특성만을 추출해서 일반화하는 것을 추상화(Abstraction)이라고 하며, 추상화된 상위 클래스를 일관되게 바라보며 하위 클래스의 기능을 사용하는 것이 바로 일관된 추상화(PSA)의 기본 개념이다. 이는 Spring에서 동작할 수 있는 라이브러리들은 POJO 원칙을 지키게끔 PSA 형태의 추상화가 되어있음을 의미한다. PSA가 필요한 주된 이유는 어떤 서비스를 이용하기 위한 접근 방식을 일관된 방식으로 유지함으로써 애플리케이션에서 사용하는 기술이 변경되더라도 최소한의 변경만으로 변경된 요구 사항을 반경하기 ..

[Spring] AOP

AOP(Aspect Oriented Programming)란, 관점 지향 프로그래밍 정도로 해석할 수 있다. 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나눠서 보고 그 관점을 기준으로 각각 모듈화 하는 것이다. 객체 지향 프로그래밍은 애플리케이션을 설계할 때 클래스가 단일 책임을 갖도록 분리하여 각 모듈의 결합도가 낮아지게 한다. 하지만, 여러 클래스에 로깅이나 보안 및 트랜잭션 등의 공통된 기능들이 흩어져 존재할 수 있다는 한계가 있다. 따라서 AOP가 필요한 것이다. 다시 말해, AOP는 애플리케이션의 핵심 업무 로직에서 로깅이나 보안, 트랜잭션 같은 공통 기능 로직들을 분리하는 것이라고 생각하면 된다. 애플리케이션을 개발하다보면 공통적으로 사용되는 기능들이 있기 마련인데, 이러한 공통 ..

[Spring] IoC / DI

IoC(Inversion of Control)란 직역하면 '제어의 역전', 애플리케이션 흐름의 주도권이 뒤바뀐 것을 말한다. 라이브러리의 애플리케이션 흐름 주도권은 개발자에게 있고 프레임워크의 애플리케이션 흐름 주도권은 프레임워크에 있다. 이것을 IoC라고 부른다. 이처럼 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전이라 부르며, 이렇게 IoC가 일어나는 공간을 IoC 컨테이너라고 부른다. IoC는 DI(Dependency Injection, 의존성 주입)와 밀접한 관련이 있다. IoC와 DI 모두 객체 간의 결합을 느슨하게 만들어 유연하고 확장성이 뛰어난 코드를 작성하기 때문이다. IoC는 서버 컨테이너 기술, 디자인 패턴, 객체 지향 설계 등에 적용하게 되는 일..

[Spring] POJO

POJO(Plain Old Java Object)는 객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고 필요에 따라 재활용이 가능한 방식으로 설계된 객체이다. 간단히 말하면 Java로 생성하는 순수한 객체라고 표현할 수 있다. Spring은 POJO 프로그래밍을 지향하는 프레임워크이며, POJO는 Spring에서 사용하는 핵심 개념인 IoC/DI, AOP, PSA를 통해 달성할 수 있다. 단순히 순수 자바 객체만을 사용해서 프로그래밍 코드를 작성한다 해서 POJO 프로그래밍이라고 볼 수는 없으며, POJO 프로그래밍으로 작성한 코드가 되기 위해서는 다음과 같은 규칙을 지켜야 한다. Java나 Java의 스펙(사양)에 정의된 것 이외의 특정 기술이나 규약에 종속되지 않는다. : 특성 기술을 상속해..

[CS]Framework

"Framework란, 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것이다." - Ralph Johnson 프레임워크는 어떠한 목적을 달성하기 위해서 복잡하게 얽혀있는 문제를 해결하기 위한 구조이다. Frame이란 단어의 사전적 의미는 '뼈대', '틀'이다. 즉, 어떤 대상의 큰 틀이나 외형적인 구조를 의미하며, 프레임워크 역시 소프트웨어 개발에서 하나의 뼈대 역할을 한다고 볼 수 있다. 프레임워크를 사용하면 애플리케이션의 핵심 로직을 개발하는 것에 집중할 수 있다. 이미 기본 구조가 만들어져 있는 상황에서 코드를 작성하기 때문이다. 또한, 애플리케이션을 효율적으로 관리할 수 있다. 프레임워크의 규약에 맞게 코드를 작성하기 때문에 유지..

개발 일지/CS 2023.02.02

[DB] SQL / NoSQL

데이터베이스는 크게 관계형 데이터베이스와 비관계형 데이터베이스로 구분한다. 관계형 데이터베이스는 SQL을 기반으로, 비관계형 데이터베이스는 NoSQL로 데이터를 다룬다. 이 둘은 만들어진 방식과 저장하는 정보의 종류, 저장하는 방법 등에서 차이가 있다. SQL(구조적 쿼리 언어)은 일관된 데이터 조작 언어를 제공하지만 NoSQL 구현은 서로 다른 기술에 따라 달라진다. 먼저 관계형 데이터베이스는 특정한 형식을 지키기 때문에 데이터를 사용할 때 수월하다. SQL을 활용해 원하는 정보를 쿼리 할 수 있는데, 이 말은 스키마가 뚜렷하게 보인다는 말과 같다. 즉, 관계형 데이터베이스에서는 테이블 간의 관계를 직관적으로 파악할 수 있다. 대표적인 관계형 데이터 베이스는 MySQL, Oracle, SQLite, P..

개발 일지/SQL 2023.01.30

[DB] ACID

ACID는 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 말한다. 트랜잭션은 여러 개의 작업을 하나로 묶은 실행 유닛으로, 각 트랜잭션은 하나의 특정 작업으로 시작해 묶여있는 모든 작업들을 완료해야 정상적으로 종료한다. 만약 하나의 트랜잭션 속에 속한 여러 작업 중에서 단 하나의 작업이라도 실패하면 모든 작업을 실패한 것으로 판단한다. 따라서, 미완료된 작업 없이 모든 작업을 성공해야 한다. 데이터베이스 트랜잭션은 ACID라는 특성을 갖고 있으며, ACID는 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 지속성(Durability)으로 이루어져 있다. Atomicity(원자성) 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는..

개발 일지/CS 2023.01.30

[DB] SQL

SQL(Structured Query Language)는 구조화된 쿼리 언어라고 해석할 수 있다. SQL은 데이터베이스 언어로, 주로 관계형 데이터베이스 시스템(RDBMS)에서 자료를 관리 및 처리하기 위해 설계된 언어이다. SQL 문을 통해 데이터베이스에서 정보를 저장, 제거, 검색 및 업데이트를 할 수 있다. 여기서 query는 '질의문'이라는 뜻으로, 예를 들어 검색을 할 때 기존에 존재하고 있는 데이터를 검색어로 필터링하기 때문에 입력하는 검색어도 일종의 쿼리라고 할 수 있다. 데이터베이스 관련 명령어 데이터베이스 생성 CREATE DATABASE 데이터베이스_이름; 데이터베이스 사용 USE 데이터베이스_이름; 테이블 생성 CREATE TABLE user ( id int PRIMARY KEY AU..

개발 일지/SQL 2023.01.30