본문 바로가기

반응형

Tech

(52)
[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 의 ..
[Docker] Docker vs VM 도커는 하나의 서버에 여러개의 격리된 컨테이너를 구동시켜서 동작시키는 일종의 가상화 기술이다. 그렇다면 기존의 가상화 기술은 어떻게 동작하고 있으며 도커와의 차이점은 무엇일까? 1. VM (Virtual Machine) 가상화 기술이란 물리적인 하드웨어 자원을 논리적인 리소스로 제공하기 위한 기술이다. 가상화 기술을 통해서 물리적인 자원을 논리적으로 구분지워서 각 프로세스에 할당하거나 할 수 있다. 가상화 기술 발전 이전에는 하나의 서버에 하나의 애플리케이션만 구동시킬 수 있었다. 하나의 서버에 하나의 OS, 프로그램 만을 운영하기 때문에 안정적이었지만, 남는 서버 자원을 그대로 방치시키기 때문에 비효율적인 경우가 많았다. 이런 비효율성을 극복하기 위해 등장한 것이 가상화 기술이다. 그 중에서도 하이퍼바..
[SQLAlchemy] 연관관계 설정 ORM 에서는 매핑된 객체들이 서로를 참조하는 구조를 연관관계를 통해서 표현한다. SQLAlchemy 에서는 relationship() 메서드를 사용하여 매핑된 모델 클래스를 정의할 때 연관관계를 표현한다. 연관관계는 1대1, 1대N, N대1, N대M 등의 구조로 이루어져 있다. 1. sqlalchemy.orm.relationship SQLAlchemy 에서는 relationship() 메서드를 사용하여 두 객체 클래스의 연관관계를 지정한다. relationship() 메서드에 연관관계를 맺으려는 클래스의 이름을 입력하여 참조 객체를 생성한다. from sqlalchemy.orm import relationship class User(Base): __tablename__ = "user" # ... tea..
[SQLAlchemy] SQLAlchemy 기본 설명 SQLAlchemy 는 파이썬의 ORM 라이브러리 중 하나이다. 이 글에서는 SQLAlchemy 의 Quick Start 내용을 기반으로 SQLAlchemy 의 기본적인 내용들을 기술한다. 1. Database 연결 - Engine Engine 은 SQLAlchemy 라이브러리의 시작점이다. SQLAlchemy 의 Pool 과 Dialect 기능을 사용하여 실제 Database 에 접근하고 DB API 를 사용할 수 있도록 해준다. 여기서 Pool 은 DB Connection Pool 을 추상화한 클래스로 connect() 를 통해서 DBAPI 연결을 생성한다. Dialect 는 SQLAlchemy 를 여러 종류의 database 와 DB API 들과 연동하여 사용할 수 있도록 하는 역할을 한다. 각 d..
[Spring] Swagger 3.0.0 적용 1. Swagger 란? Swagger 는 간편하게 API Spec 문서를 자동으로 작성하고 이를 편집하여, 화면에 출력할 수 있게 해주는 기능 들을 제공하는 오픈 소스 툴이다. 서버의 API 리스트를 문서화하여 화면에 출력하여 보여주고, 파라미터를 직접 입력하여 API 테스트도 수행할 수 있다. RESTful 하게 구현한 SpringBoot 에도 Swagger 를 적용하여 REST api 들의 문서화와 테스트를 수행할 수 있다. 아래의 예제에서는 Swagger 3.0.0 을 사용하여 Swagger 를 적용하였다. 2. Swagger 설정 Swagger 를 SprintBoot 에 적용하기 위해서는 우선 build.gradle 에 의존성을 추가해주어야 한다. implementation 'io.springf..
[Linux] 리눅스 locale 설정 리눅스 기반의 OS 에서 개발을 진행하다 보면 한글의 인코딩 문제로 에러가 나는 경우가 있다. 파이썬으로 개발을 하던 도중 한글명의 파일을 다룰 때 ascii encoding 과 관련된 에러가 발생했다. 파이썬의 encoding 설정을 확인하기 위해서 sys 모듈의 메서드를 확인했는데, getdefaultencoding() 을 호출하는 경우 utf8 로 설정되어 있지만 getfilesystemencoding() 을 호출하는 경우 ascii 로 되어있는 것을 확인하였다. 이로 인해서 filesystem 의 encoding 설정을 바꾸는 방법을 찾아보았다. 1. locale locale 은 리눅스 명령어이자 사전적으로 장소, 지역 등을 의미한다. 지역에 따라서 해당 코드의 세트, 날짜 및 시간 형식 지정 규..
[JPA] JPQL 경로표현식과 fetch join 1. 경로 표현식 JPA 에서 경로 표현식은 엔티티 객체에 점을 찍어 객체 그래프를 탐색하는 방식을 의미한다. 경로 표현식을 통해서 엔티티가 가지고 있는 값들, 필드에 접근할 수 있다. 경로 표현식을 통해서 접근하는 필드는 기본 값 데이터를 저장하는 상태 필드와 연관관계 매핑으로 연결된 객체를 저장하는 연관 필드로 구분된다. - 상태 필드 단순히 값을 저장하기 위한 필드이다. 더이상 탐색을 할 수 없는 경로 탐색의 마지막 필드이다. # JPQL select m.username, m.age from Member m # SQL select m.username, m.age from Member m - 연관 필드 연관 관계를 저장하는 필드. 연관관계의 매핑 형식에 따라 단일 값 연관 필드와 컬렉션 값 연관 필드..
[JPA] JPQL 기본 문법 1. JPQL JPQL 은 SQL 을 추상화하여 사용하는 객체지향 쿼리 언어이다. 따라서 테이블을 대상으로 하지 않고 엔티티 객체를 대상으로 쿼리를 수행한다. 또한 추상화를 통해서 특정 데이터베이스 SQL 에 의존되지 않게 개발할 수 있다. 실제 수행할 때는 JPQL 로 작성한 쿼리가 매핑정보 등을 통해서 SQL 로 변환되어 DB 에 수행된다. 2. JPQL 기본 문법 JPQL 의 문법은 SQL 과 유사하다. 다만 다른점은 테이블의 이름이 아니라 엔티티의 이름을 사용한다는 것이다. 아래의 예시에서 Member 는 테이블이 아닌 엔티티 클래스의 이름이다. // Member 는 테이블이 아닌 엔티티이다. em.createQuery("select m from Member as m where m.age > 18..

반응형