본문 바로가기

반응형

분류 전체보기

(236)
[SpringBoot] Database 연동 - 2 (JDBC) 1. JDBC - JDBC 란? JDBC 는 Java Database Connectivity 의 줄임말로, DB 에 접근할 수 있도록 자바에서 제공하는 자바 표준 SQL 인터페이스 API 이다. 다양한 종류의 RDBMS 에 접속하고 SQL 문을 수행하여 처리하는 작업을 할 때 사용된다. JDBC 를 통한 자바 애플리케이션과 DB 의 구조는 다음과 같다. 자바 애플리케이션 - JDBC API - JDBC Driver - Database JDBC 는 인터페이스 API 이기 때문에, 각 DBMS 에 맞는 JDBC 드라이버를 설정해주어야 한다. JDBC 드라이버는 실제 DBMS 와 통신을 수행하는 자바 클래스로 jar 파일로 제공됩니다. JDBC 드라이버는 DBMS url 과 계정 정보 등을 입력받아서 DB 연..
[SpringBoot] Database 연동 - 1 (DataSource, h2 database) 1. DataSource DataSource 는 실제 물리적인 database 들과의 연결을 위한 팩토리이다. DriverManager 클래스의 대체제로 username, password 과 URL 을 사용하여 database 와 연결합니다. DataSource 를 통해서 Connection 객체와 connection pooling, distributed transactions 등의 기능을 사용할 수 있습니다. - Configuring a DataSource DataSource 를 사용하기 위해서 먼저 build.gradle 파일의 의존성에 jdbc 라이브러리를 추가한다. 만약 maven 을 사용한다면 pom.xml 의 dependency 에 추가하면 된다. implementation 'org.sprin..
[Spring] Spring MVC 1. Spring MVC 구조MVC 패턴은 애플리케이션의 각 영역을 Model, View, Controller 로 역할을 나누어 설계하는 디자인 패턴이다. 각 영역의 역할은 다음과 같다.  - Controller: HTTP 요청을 받아 파라미터를 검증하고 비즈니스 로직을 실행한다. View 에 전달할 결과 데이터를 모델에 담아서 반환한다. 이때 Controller 와 Model 사이에 Service layer 를 두어서 실제 비즈니스 로직을 구현한다.- Model: view 에 출력할 데이터를 저장하고 있다. Controller 에서 요청이 들어왔을 때 조회, 삽입, 삭제, 수정 등의 데이터를 다루는 동작을 수행한다.- View: 모델에 담겨있는 데이터를 사용하여 화면에 렌더링한다.- Spring MVC..
[Spring] @Controller vs @RestController Spring 에서 컨트롤러를 지정해주는 어노테이션으로 @Controller 와 @RestController 가 있다. @Controller 는 Spring MVC 에서 Controller 의 역할을 하는 클래스를 지정하는 것으로 요청에 대한 응답을 Spring MVC 에서 View 에 결과 객체를 담아서 반환한다. 반면에 @RestController 는 Restful 한 웹 서비스를 구현할 때 사용하는 어노테이션으로 @RestController 로 지정된 클래스는 결과 값을 View 가 아닌 객체 그 자체로 JSON 이나 XML 형태로 반환한다. 해당 결과들은 Http Response 의 Body 에 담겨져서 Client 로 전달된다. 1. @Controller @Controller 는 Client 의 ..
[JAVA] 자바 Thread-safe 자바에서는 성능의 향상을 위하여 멀티 스레드 기능을 제공한다. 하지만 멀티 스레드 환경에서 개발을 하다보면 의도했던 결과가 나오지 않는 경우가 있다. 주로 여러 스레드가 하나의 자원에 동시에 접근하면서 발생하는 문제이다. 이러한 문제들을 해결하기 위하여 자바에서는 여러 기능들을 제공하는데, 이러한 기능들을 사용하여 멀티 스레드 환경에서의 실행에 문제가 없도록 프로그래밍한 프로그램을 thread-safe 하다고 한다. 1. synchronized (암시적 lock 사용) 자바에서 thread-safe 하게 구현하는 가장 간단한 방법은 synchronized 키워드를 사용하는 것이다. thread-safe 하게 동작하게 하고 싶은 메서드 또는 블럭을 지정하여서 synchronized 키워드와 함께 선언하여 ..
[DB] 트랜잭션 격리수준 (Transaction Isolation Level) 1. 트랜잭션 격리 수준 (transaction isolation level) 트랜잭션의 격리 수준이란 동시에 여러 건의 트랜잭션이 수행되는 경우, 트랜잭션들이 서로 얼마나 고립되어 있는지를 나타내는 정도이다. 간단하게 특정 트랜잭션이 다른 트랜잭션으로 인해 변경된 데이터를 볼 수 있도록 허용할지 말지를 결정하는 것이다. 격리 수준은 크게 아래의 4가지로 구분된다. - READ UNCOMMITTED - READ COMMITTED - REPEATABLE READ - SERIALIZABLE 아래로 내려갈수록 고립 정도가 높아지고, 성능이 떨어진다. 일반적인 온라인 서비스에서는 READ COMMITED 나 REPEATABLE READ 를 사용한다. 2. READ UNCOMMITED READ UNCOMMITED..
[Docker] Docker vs VM 도커는 하나의 서버에 여러개의 격리된 컨테이너를 구동시켜서 동작시키는 일종의 가상화 기술이다. 그렇다면 기존의 가상화 기술은 어떻게 동작하고 있으며 도커와의 차이점은 무엇일까? 1. VM (Virtual Machine) 가상화 기술이란 물리적인 하드웨어 자원을 논리적인 리소스로 제공하기 위한 기술이다. 가상화 기술을 통해서 물리적인 자원을 논리적으로 구분지워서 각 프로세스에 할당하거나 할 수 있다. 가상화 기술 발전 이전에는 하나의 서버에 하나의 애플리케이션만 구동시킬 수 있었다. 하나의 서버에 하나의 OS, 프로그램 만을 운영하기 때문에 안정적이었지만, 남는 서버 자원을 그대로 방치시키기 때문에 비효율적인 경우가 많았다. 이런 비효율성을 극복하기 위해 등장한 것이 가상화 기술이다. 그 중에서도 하이퍼바..
[Python] GIL (Global Interpreter Lock) 파이썬에서 멀티쓰레딩과 같이 동시성, 병렬 작업 등에 대한 공부를 하다보면 항상 나오는 단어가 있다. 바로 GIL 이다. GIL 은 Global Interpreter Lock 의 줄임말로 파이썬 인터프리터의 동작과 관련된 용어이다. GIL 이 무엇인지 대략적으로는 알고있지만 자세하게, 그래서 실제 멀티 쓰레딩, 멀티 코어에서 어떻게 동작하는지는 알지 못해서 이번 기회에 좀 더 알아보려 한다. 1. GIL GIL 은 일종의 mutex 이다. 인터프리터에서 thread-safe 하지 않은 객체들에 대한 접근을 막기위해 사용하는 쓰레드 mutex 이다. 인터프리터에서 한 번에 하나의 쓰레드만 실행하도록 하여 쓰레드들 간의 동작에 동기화를 맞추도록 하는 동작 원리이다. 파이썬의 경우 CPython 인터프리터가 ..

반응형