전체 글

https://github.com/Layton0-0
Language/Java

Java 기본 - Annotation

어노테이션이란? 스프링을 쓸 때 많이 쓰는 어노테이션들이 있다. @PostMapping이라던가 @RequestBody라던가 어느샌가 당연하게 기능 위주로 생각하며 어노테이션을 쓰고 있었다. 그렇다면 어노테이션은 무엇이고 왜 쓰는걸까? 어노테이션이란 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종이다. 소스 코드에 대한 데이터를 제공하는 것이다. 메타데이터란? 데이터에 대한 데이터. 데이터의 상태를 표현하는 데이터이다. 어노테이션의 용도 컴파일러에게 문법 에러를 체크하도록 정보를 제공한다. 소프트웨어 개발툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보를 제공한다. 런타임 시 특정 기능을 실행하도록 정보를 제공한다. 어노테이션의 종류 내장 어노테이션 @Override 선언한 메서드가 ..

Spring/프로젝트

JPA @Id에 Long을 쓴 이유

김영한님의 강의를 보면 항상 @Id값에 @GeneratedValue를 해 auto_increment를 할 경우 Long타입을 쓰시는 모습을 볼 수 있었다. int가 아니라 long을 쓰는 이유는 더 많은 값을 카운트할 수 있어 확장성 때문인 것은 알겠다. 하지만 왜 long이 아니라 Long을 사용하시는걸까? 궁금해서 구글링을 해보니 long은 primitive type이라 값이 없을 경우 0으로 초기화되지만 Long은 wrapper type이라 값이 없을 경우 null로 초기화되기 때문이라는 것을 알 수 있었다. 즉, long으로 둘 경우 기본 초기화값에도 어쨌든 0이라는 값이 존재하기 때문에 이 값이 초기화가 되지 않아 0인건지 아니면 업데이트된 값이 0인지 바로 알기 어렵다는 치명적인 단점이 생기는..

Language/Java

Java 기본 - Collection

Collection을 사용하는 이유 다수의 데이터를 다룰때는 자료구조를 사용하는 것이 효율적인데 표준화된 클래스를 사용하면 자료구조를 직접 구현하지 않고 사용할 수 있어 용이함. 배열과 다르게 객체 보관을 위한 공간을 미리 정하지 않아도 되므로 상황에 따라 객체의 수를 동적으로 정할 수 있어 공간적인 효율성이 높아진다. Collection의 종류 List List 인터페이스를 사용자가 @Override를 통해 직접 정의해 사용할 수도 있다. 대표적인 구현체로는 ArrayList가 있다. 이외에도 LinkedList 등의 구현체가 있다. Map 대표적인 구현체로는 HashMap이 있다. Key-Value의 구조로 이루어져 있으며 자료구조의 해시테이블과 같다. Key값은 중복불가한 값이며 순서를 보장하지 않..

Language/Java

Java 기본 - JVM이란 무엇일까?

JVM이란? JVM이란 단어적 의미로는 JAVA Virtual Machine - 자바 가상 머신이라는 의미이다. 가상머신(VM)이란 프로그램의 실행을 위해 물리적인 머신과 유사한 머신을 소프트웨어로 구현한 것이다. JVM이란 OS에 종속받지 않고 CPU가 Java를 인식, 실행할 수 있게하는 VM이다. 자바프로그램의 실행과정 어떤 OS에서 실행되든 자바 컴파일러: 자바 소스코드(.java)를 자바 바이트코드(.class)라는 공용어로 변환시킨 후 JVM: 자바 바이트코드(.class)를 로컬 OS가 인식할 수 있는 바이트코드로 해석해 OS에 지시하는 역할을 한다. 1. 프로그램이 실행된다. -> JVM은 OS로부터 이 프로그램이 필요로 하는 메모리를 할당받는다. (JVM은 이 메모리를 용도에 따라 여러 ..

Language/Java

GC란 무엇일까? Garbage Collector?

Garbage Collector란 무엇일까? 런타임에 동적으로 할당한 메모리 영역 중 사용하지 않는 영역을 탐지하여 해제하는 기능 GC의 영역 eden 처음 객체가 생성되는 공간 Survivor 0, 1 -> Minor GC eden영역이 가득 찼을 때 reachable(참조되고 있는) 값만 걸러서 저장되는 영역 Survivor (?)이 가득 차게 되면 비어있는 상대 Survivor (??)에 똑같이 reachable(참조되고 있는) 값만 걸러서 저장한다. 따라서 Survivor 0과 1 중 하나는 무조건 비어있는 형태를 띈다. 한번 걸러서 저장할 때마다 그 객체의 age는 올라가고 저장되지 못한 객체들(unreachable 객체들)은 삭제된다. Old Generation age값이 일정값을 넘긴 생존한..

Spring/프로젝트

ERD 설계 과정

TripDream 프로젝트를 시작하고 DB구조를 짜는 것이 먼저라고 판단이 들었다. ERD를 설계해보려 한다. 기능 정의서는 다음과 같다. https://www.notion.so/8e62f0fe168245a28c20576c9bbd2894?pvs=4 기능 정의 갔던 나라 체크 ( GPS인증? 도장찍기~) www.notion.so 기능별 요구사항에 맞춰 ERD를 설계해볼 예정이다. 회원가입 먼저 회원정보 테이블이 필요하다. MEMBER 테이블을 생성. 안에 회원가입 시 받고싶은 정보를 필수/선택을 기준으로 NULL, NOTNULL로 정했다. 회원 테이블의 PK값은 유일무이하고 특별한 값으로 하고 싶어 uuid 자동생성으로 정했다. 또한 row의 생성시간, 수정시간은 모든 테이블에서 받을 예정이다. 추후 접속..

Computer Science/운영체제

뮤텍스와 세마포어(Mutex Locks & Semaphore)

CSP를 해결하는 소프트웨어 툴 3가지 뮤텍스(Mutex Locks) : 동기화의 기본 툴 mutual exclusion = mutex critical section에 접근하기 위한 열쇠가 필요하다. 접근이 끝나면 열쇠를 반납 Busy Waiting 대기 상태에서 무한 루프를 도는 상태 Spinlock 세마포어(Semaphore) : 동기화를 위한 더 효과적인 툴 신호장치. 신호기. 모니터(monitor) : 뮤텍스와 세마포어의 단점을 극복한 툴 Liveness

Computer Science/운영체제

동기화 문제의 해결책 (Synchronization Solution)

소프트웨어 기반 해결책 데커 알고리즘 아이젠버그, 맥과이어 알고리즘 피터슨 알고리즘 두 프로세스가 번갈아 실행하는 것을 규제함 임계 영역과 여분 영역을 번갈아 실행 자기 차례임을 표시하고 실행 완벽하게 동작한다는 보장이 없다 상호배제, 데드락, 기아현상을 예방할 수 있다 하드웨어 기반 해결책 임계 영역 문제 해결에 도움을 줌으로써 동기화를 직접적으로 할 수 있음 3가지 동작 메모리 장벽(memory barriers or fences) 하드웨어 지침(hardware instructions) 원자 변수(atomic variables) 원자성(Atomicity) 원자적 동작: 인터럽트를 걸 수 없는 하나의 동작 단위 원자성을 지키는 변수를 설정해 지킬 수 있다.

레이튼
개발 공부 스케치북