JSCODE 모의면접에 참여하게된 계기당장 면접을 앞둔 상황은 아니었지만, 면접을 준비하는 방식으로 CS를 공부하면 내가 무엇을 모르고 있는지 더 정확히 파악할 수 있을 것이라 생각했습니다. 또한, 고등학생 때 수능을 준비하며 다른 사람에게 배운 내용을 설명할 때 기억이 오래 남았던 경험이 떠올라, 효과적인 학습을 위해 면접 스터디에 참여하게 되었습니다. 스터디를 통해 개인적으로 성장한점 면접 경험이 적어 막연한 불안감이 있었지만, 스터디를 통해 면접에 대한 개인적인 노하우를 쌓을 수 있어 자신감이 생겼습니다. 또한, 애매하게 알고 있었던 자바의 이론적 내용을 확실하게 잡고 갈 수 있어서 좋았습니다. 느낀점 앞으로 CS 공부를 할 때 면접 형식의 스터디를 활용해야겠다고 느꼈습니다. 이렇게 공부하면 모르는..
분류 전체보기

💡 가비지 컬렉션이란?- 메모리 관리 기술로 JVM의 Heap 영역에서 동적으로 할당했던 메모리를 주기적으로 제거하여 메모리를 관리 (자바기준)- 메모리 제거 대상은 어떤 곳에서도 참조되고 있지 않는 Unreachable 객체이다. (장점)1. 개발자가 메모리 관리를 신경 쓰지 않고 로직에만 집중 할수 있다. (단점)1. 메모리가 언제 제거되는지 알기 힘들어 제어 할수 없다. 2. 가비지 컬렉터가 동작하는 동안은 다른 동작을 멈추기 때문에, 성능상 문제가 있다. (Stop the world) 💡 가비지 컬렉션의 동작 방식- 어떤 방식으로 Unreachable 객체를 솎아 낼까?Mark And Sweep 알고리즘 1. 식별 과정(Mark) : 그래프 순회를 통해 어떤 객체들이 참조되고 있는지 식별한다..

💡 동시성과 병렬성- 둘다 멀티 태스킹을 처리하는 방식이지만, 다르다. (동시성)- 동시성은 여러 작업이 시간을 나누어 마치 동시에 실행되는 것 처럼 보이는 기술- 멀티태스킹을 예시로 들수 있음 (하나의 코어로 여러개의 작업을 쪼개 실행하는 기술)- SW 관점 (병렬성)- 병렬성은 실제 물리적으로 여러 작업을 동시에 실행하는 것- 여러 코어가 실제로 작업을 동시에 실행 - HW 관점 💡 가시성 문제와 원자성 문제- 둘다 병렬 프로그래밍에서 발생하는 문제로, 동시성 이슈의 주범이다. (가시성 문제 - Visibility)- 멀티스레드 환경에서 한 스레드에서 변경된 데이터가 다른 스레드에서 즉시 보이지 않는 문제이다.- 발생 이유는 각 스레드는 독립적인 CPU 캐시에 변경된 데이터를 저장하고, 나중에 ..

💡 JCF란?- JCF(Java Collection FrameWork) : 자료 구조 종류의 형태들을 자바 클래스로 구현한 모음집- JCF의 계층 구조➜ List, Queue, Set과 달리 Map은 두개의 데이터를 묶어 한쌍으로 다루기 때문에 Collection 클래스와는 분리되어 있다.➜ Vector, Stack, HashTable과 같은 클래스들은 레거시 임으로 사용 하지 않는다 💡 List 인터페이스 (ArrayList., LinkedList, Vector)- 순서가 있는 데이터 집합- 같은 요소의 중복 저장 허용- 배열과 마찬가지로 index로 접근- List vs 배열 : 리스트는 자료형 크기가 고정이 아니라 데이터 양에 따라 동적으로 늘어났다 주는것에 반해 배열은 고정되어 있다.- 내부적..

💡 String literal과 new String(””) 차이- String 리터럴은 String constant pool 이라는 영역에 저장 (자바는 문자 리터럴을 특별히 관리)- String constant pool 은 동일한 문자열에 대해서는 하나의 참조를 재사용- new String(””) 은 매번 새로운 String 객체를 Heap 영역에 저장String str1 = new String("Hello"); String str2 = "Hello"; String str3 = "Hello";System.out.println(str1.equals(str2)); // (1) true System.out.println(str1 == str2); // (2) false System.out.println(s..

💡 Java의 특징1. 객체지향 언어이다.2. 모든 객체를 new 하여 사용하고, 이 생성된 객체를 가비지 컬렉터가 별도의 로직을 거쳐 쓰지 않는 객체를 수거해간다.3. Call By Value로 동작한다. ➔ 포인터 개념이 없음4. 멀티스레드를 지원한다. ➔ 파이썬 같은 경우는 GIL 때문에 멀티스레드를 이용하도록 코드를 작성해도 실제로는 싱글스레드로 동작한다.5. JVM(Java Virtual Machine) 위에서 실행되기 때문에 다양한 운영 체제에서 동일한 코드로 작동할 수 있음 💡 Java의 단점1. 느리다.(이유)모든 객체를 new 하고, 이를 GC가 관리하는데 GC가 사용될 때 Stop the world가 발동한다* Stop the world란? GC가 동작할때 GC를 제외한 모든 스레..

KTX의 빈자리 알림을 보내주는 서비스를 개발하고 있습니다. 개요저희 서비스에서는 KTX의 열차 시간표를 공공 API를 통해 가져옵니다.공공 API의 제약 조건은 다음과 같습니다.1. 요청 날짜로부터 일주일 후 열차 시간표 까지 가져올 수 있습니다.2. 출발 기차역, 도착 기차역, 출발 날짜가 모두 같은 경우 한꺼번에 데이터를 가져올수 있습니다. 그래서 저희는 매일 새벽마다 그 다음 날 열차 정보를 가져와서 DB에 삽입 해야했고, 이 작업은 배치 서버에서 수행되었습니다. 첫번째 시도 : 최대한 많은 데이터를 한번에 공공 API를 통해 가져옴먼저 공공 API와 통신에 드는 시간인 IO 비용을 최대한으로 줄이기 위해, 출발 기차역, 도착 기차역, 출발 날짜가 모두 같은 경우 데이터를 한번에 다 가져오도록..

Flyway란?Flyway는 데이터베이스 스키마를 버전 관리하고 마이그레이션을 관리하는 도구입니다.(저는 간단하게 Git의 데이터베이스 버전이라고 생각했습니다.)SQL 파일로 마이그레이션 스크립트를 정의하고, Flyway가 이를 순차적으로 실행하여 데이터베이스 구조를 업데이트 합니다. Flyway를 통해 변경 사항을 추적하거나, DB 구조 변경 과 롤백을 보다 쉽게 할 수 있습니다. Flyway를 적용한 이유지금 프로젝트에 Flyway를 적용한 이유는 다음과 같습니다. (개요)저희 서비스는 서버가 실행 함과 동시에 약 10만개의 데이터를 DB에 넣는 배치 작업이 이루어지는데, DB 구조가 변경될때 마다 ddl-auto를 create로 설정하여 모든 데이터를 날리고 다시 삽입 하는 것은 굉장히 비효율적이었..