전체 글
-
Golang 디커플링 - 메소드 (Method)스터디/Saturday-Night 2021. 4. 4. 00:03
📖 이 글은 Saturday Night 스터디에서 The Ultimate Go를 주제로 발표하기 위해 만들어졌습니다. 디커플링 (Decoupling) 소프트웨어 공학에서 결합도(Coupling)란 모듈간 의존도를 나타내는 것을 의미합니다. 반대로 디커플링이란 인터페이스 등을 활용하여 모듈간 의존도를 최소화하여 개발하는 방법을 의미합니다. 메소드 (Method) Go에서 메소드는 마치 다른 언어에서의 메소드를 흉내내는듯한 함수입니다. 우선 코드를 볼까요? 코드 형태는 다음과 같습니다. 예제코드 type user struct { name string email string } func (u user) notify() { fmt.Printf("Sending User Email to %s \n", u.name,..
-
Golang 문법 - 변수스터디/Saturday-Night 2021. 3. 8. 22:54
* 이 글은 Saturday Night 스터디에서 The Ultimate Go를 주제로 발표하기 위해 만들어졌습니다. 빌트인 타입 (Built-in Type) Go언어에서 타입은 두 가지의 질문을 통해 완전성과 가독성을 제공합니다. 할당한 메모리의 크기는 얼마인가? (예: 32-bit, 64-bit) 이 메모리 데이터는 무엇을 의미하는가? (예: int, uint, bool, ...) 타입은 int32, int64처럼 명확한 이름도 있습니다. uint8은 1 byte 메모리 크기에 10진수 숫자를 가집니다. int32는 4 byte 메모리 크기에 10진수 숫자를 가집니다. uint나 int처럼 메모리 크기가 명확하지 않은 타입도 존재하는데, 이를 선언하면 빌드 시 프로그램이 돌아갈 아키텍처에 따라 크기가..
-
zsh를 꾸며보자 (Spaceship 테마 & colorls)기타 2020. 11. 26. 23:54
zshell을 사용하면서 맘에 드는 테마를 찾아서 적용해봤다. Spaceship 테마 $ git clone https://github.com/denysdovhan/spaceship-prompt.git "$ZSH_CUSTOM/themes/spaceship-prompt" $ ln -s "$ZSH_CUSTOM/themes/spaceship-prompt/spaceship.zsh-theme" "$ZSH_CUSTOM/themes/spaceship.zsh-theme" git에서 clone하여 설치해주자. .zshrc 작성 # Prompt ZSH_THEME="spaceship" SPACESHIP_PROMPT_ADD_NEWLINE="true" SPACESHIP_CHAR_PREFIX='\ufbdf ' SPACESHIP_C..
-
격리 전략Java/JPA 2020. 10. 25. 21:09
격리 전략 JPA는 데이터 베이스 트랜잭션 격리 수준을 Read Committed을 기본으로 사용하며, 더 높은 격리 수준이 필요한 경우 낙관적 락이나 비관적 락을 사용해야 한다. 낙관적 락(Optimistic Lock) 낙관적 락은 엔티티의 Version 필드를 검사해서 버전정보를 체크하여 업데이트를 처리하는 방법이다. (애플리케이션에서 제공하는 락) 엔티티에서 버전정보로 사용할 필드에 @Version 어노테이션을 부여하고 테이블에 버전 정보로 사용할 컬럼을 생성해야 한다. UPDATE table SET col = ? Version = Version + 1 (트랜잭션이 UPDATE 할 때 마다 버전 값 증가) WHERE ID = ? AND Version = ? (버전 비교) 위의 쿼리를 실행했을 때, ..
-
트랜잭션, 동시성Java/JPA 2020. 10. 25. 19:33
트랜잭션 애플리케이션의 기능이 수행되기 위해서는 동시에 여러 일을 처리해야 한다. 이러한 단계를 묶어 트랜잭션(작업 단위)라고 한다. 트랜잭션의 작업 과정 중 하나의 과정이라도 실패하는 경우 전체의 작업 단위가 실패되어야 한다. 이러한 특징을 원자성(automicity)라고 하는데 모든 연산(작업)이 하나의 원자 단위로 실행되어야 한다는 개념을 의미한다. 트랜잭션은 흔히 'ACID'라고 하는 데이터의 일관성(consistency), 지속성(durability) 등의 네가지 보장해야 하는 속성이 있다. 원자성(Atomicity): 트랜잭션 내에서 실행한 작업들은 하나의 작업인 것 처럼 모두 성공하거나 모두 실패해야 한다. 일관성(Consistency): 모든 트랜잭션은 일관성 있는 데이터 베이스 상태를 유..
-
영속성 컨텍스트Java/JPA 2020. 10. 23. 01:31
영속성 컨텍스트(Persistence Context)란? 영속성 컨텍스트는 엔티티를 영구 저장하는 환경을 뜻한다. 애플리케이션과 데이터 베이스 사이에서 레이어(영속성 컨텍스트)를 두어 엔티티 객체를 관리하기 위한 공간으로 사용된다. 영속성 컨텍스트를 조금 더 알기 위해서는 몇가지를 알고 넘어가야 한다. 엔티티 매니저란? 엔티티 매니저는 엔티티의 CRUD와 같이 엔티티와 관련된 모든 작업들을 처리하는 관리자다. JPA는 매 요청마다 EntityManagerFactory에서 EntityManager를 생성해주고, DB 커넥션 풀을 사용하여 데이터 베이스에 연결한다. * 엔티티 매니저는 여러 쓰레드가 하나의 엔티티 매니저에 접근하면 동시성 문제가 발생한다!!! 는데 무슨 이야기일까..?🤔 외부로부터 요청이 발..
-
JPA(Java Persistence API)Java/JPA 2020. 8. 7. 02:45
JPA란? JPA는 자바의 ORM 표준 명세다. 과거에 엔터프라이즈 자바 빈즈(EJB) 기술 표준이 있었는데, EJB에는 엔티티 빈(Entity Bean)이라는 ORM 기술이 있었다. 이 엔티티 빈은 자바 엔터프라이즈 (J2EE)환경에서만 동작하는 한계가 있었고 사용하기에 복잡하고 어려운 문제들이 있었다. 이러한 단점들을 해결하기 위해 하이버네이트 ORM 프레임워크가 등장하게 되었고 EJB 3.0에서 하이버네이트를 기반으로 '새로운 ORM 기술들을 정의하여 표준으로 지정해 JPA가 탄생'하게 되었다. JPA는 ORM에 관련된 기능 인터페이스들의 집합체이다. 이러한 기능들을 구현한 ORM 프레임워크를 선택하여 조합해야 사용할 수 있다. ORM 프레임워크 종류 Hibernate (링크) EclipseLink..
-
[Intellij] 파라미터 인자 힌트 설정하기IDE 2020. 3. 9. 12:42
개인적으로 인텔리제이의 가장 강력하고 좋은 기능이라고 생각하는 옵션 중 하나다. 메소드를 호출하면 어떠한 인자를 넘겨야하는지 힌트를 알려주는 옵션이다. 1. Preferences -> Editor -> Inlay Hints -> Java -> Parameter hints 항목에서 Show parameter hints for 옵션을 활성화 해주고 Parameter with names that are contained in the method name 옵션을 체크해주자.