목록전체 (129)
지나공 : 지식을 나누는 공간

마지막으로 회고록을 쓴 7월 17일 이후로 무려 4개월 만에 블로그를 켰다. 평소에 멀티가 안되기 때문에 입사 시험을 준비할 때는 블로그를 잘 안 썼는데, 지금 당장은 근무를 막 시작한 때라 더 늦기 전에 네웹 인턴십 후기를 작성하려고 한다. 네이버웹툰 전환은 되지 못했고 타사 근무다. 토스, 현대자동차, LG CNS, 등등.. 여러 회사의 최종 면접도 겪었다. 아무튼 취업준비 근황도 있는데 이건 나중에 다른 후기 포스팅을 남길 거고, 여기선 네웹만! 채용 전형 관련은 아래 포스팅에서 확인하세욤. 네이버웹툰 인턴십 합격후기 + 상반기 취준 회고 (tistory.com) 네이버웹툰 인턴십 합격후기 + 상반기 취준 회고 서론이 좀 길 것 같으니 네웹 인턴십 전형이 궁금하다면 서론 읽지 말고 아래로 아래로~ ..

계속 추가되어 수정될 예정입니다. 입력받기 (BufferedReader, Scanner) 컬렉션 프레임워크와 종류, 차이, 주요 메소드 스택, 큐 등 해시, 해시 순회 등 다양한 정렬 : comparable, comparartor, stream 활용 등 BFS, DFS 투포인터 다익스트라 MST : 크루스칼, 프림 입력 받기 Scanner와 BufferedReader 차이 1) Scanner의 버퍼 크기는 1024 chars, BufferedReader는 8192 chars 2) BufferedReader는 문자열을 단순히 읽고 저장하지만 Scanner는 문자열을 구분해서 분석할 수 있다. 3) BufferedReader는 동기화가 지원되어 Thread-safe하고 Scanner는 지원되지 않는다. 4)..

코루틴의 취소에 대해 알아본다. 코루틴의 취소를 알아야 리소스도 해제할테니 잘 알아두자! Canceling coroutine execution fun maini() = runBlocking { val job = luanch{ repeat(1000) { i -> println("job: I'm sleeping $i ...") delay(500L) } } delay(1300L) println("main : I'm tired of waiting!") job.cancel() job.join() println("main : Now, I can quit") } launch는 코루틴 job을 반환하는데 이 job은 취소하는 기능도 가지고 있다. 1000번을 반복하면서 0.5초 간격으로 숫자를 출력하고, 1.3초 지났..

코루틴을 정리하면 비동기 처리를 순차적으로 간단하게 하고, 콜백을 대체할 수 있는 도구다. 뭐가 편해지는 건지 한번 코드로 확인해보자. 코루틴, 뭐가 편해지는걸까? val user = fetchUserData() textView text = user.name 위처럼 코드를 짜면 참 편하다. 바로 서버를 호출하고, 그 결과를 바로 텍스트뷰에 삽입할 수 있으니까. 하지만 위처럼 할 수는 없다. 서버를 호출하는 부분은 네트워크 부분이기 때문에 NetworkOnMainThreadException이 발생하기 때문이다. 지난 포스팅에서 말했듯, 네트워크 작업은 main thread가 아니라 IO thread에서 작업하는 것이다. 근데 지금은 메인스레드에서 네트워크 콜을 하고 있네? 문제다. fetchUserData..

서론이 좀 길 것 같으니 네웹 인턴십 전형이 궁금하다면 서론 읽지 말고 아래로 아래로~ 취업 준비의 시작, 그리고 올해 상반기 결과 2021년 2월에 졸업을 하고, 올해 초에 시작한 동아리 활동을 마쳤더니 4월이 되어 있었다. 조금 부끄러운 소리지만, 당시 동아리 활동이 바쁘다는 핑계로 여느 취준생처럼 열심히 자소서를 제출하지는 않았고 그냥 남들 다 쓴다는 삼성전자에만 3월에 자소서를 제출했었다. 그리고 4월 중순에 서류 합격의 결과를 받았다. 그때는 잠시 미쳤던건지, 뭔가 합격할 것 같은 느낌이 마구 들어서 바로 다음 날부터 2주간 삼성전자의 코딩테스트만을 준비했다. 정말 막막했지만 일단 뭔가 붙을 거 같다라는 이상한 자신감 덕분에(?) 계속 틀려도 계속 몰아붙이면서 매일 8-10시간씩 삼성전자의 기출..

코루틴(Coroutine)? 실행의 지연과 재개를 허용함으로써, 비선점적 멀티태스킹을 위한 서브 루틴을 일반화한 컴퓨터 프로그램 구성요소. 이제 진하게 칠한 단어를 하나씩 공부해보자! 1. 루틴과 서브루틴? 프로그램은 보통 크고 작은 여러가지의 루틴을 조합시켜서 성립되는데 여기서 메인 루틴과 서브루틴으로 나뉜다. 메인 루틴 : 프로그램 전체의 개괄적인 동작 절차를 표시하도록 만들어진 루틴. 서브 루틴 : 반복적인 특정 기능을 모아서 별도로 묶인 루틴. 서브 루틴은 별도의 메모리에 해당 기능을 모아 놓고 서브루틴이 호출될 때마다 저장된 메모리에 이동한 뒤 다시 return을 통해 원래 호출자의 위치로 돌아온다. 서브루틴은 함수와 비슷하다. 코루틴도 루틴의 일종인데, 3가지 차이점이 존재한다. 메인 - 서브..
REST API 의 장점 학습과 사용이 매우 쉽다. 자유도가 높아 원하는 대로 사용 가능하다. json이 응답으로 오면 파싱할 필요도 없다. REST API의 문제점 너무 자주 바뀌는 API (서버에서 자꾸 변경할 때가 많음) 너무 높은 자유도 버저닝(이 가능하긴 하나 손이 너무 많이 감) api 문서를 만들 수는 있으나 코드랑 너무 떨어져 있으니 죽은 문서가 됨 그래서 나온 게 바로 IDL(Interface Description Language) 라고 하는 인터페이스 정의 언어이다. 이것의 큰 장점은 언어에 종속되지 않고 컴포넌트 사이의 통신을 가능하게 한다. 그럼 우리는 이 rest api를 어떤 idl을 사용해서 표현할 수 있을까? 라는 고민을 한다. 첫 번째는 open API로, 그 장점은 아래와..

Stack and Queue가 뭔가? 스택은 LIFO(Last in First Out) 형식의 자료구조고, 큐는 FIFO(First In First Out)형식의 자료구조다. 만약 스택에 데이터가 하나도 없는데 pop을 하면 어떻게 되는가? 즉, 비어있는 스택을 참조하면 무슨 일이 일어날까? 비어 있는 스택에서 데이터를 pop하면 Stack Overflow가 발생한다. 스택 오버플로우는 언제 발생하는가 비어 있는 스택에서 pop할 때 스택의 최대 사이즈를 넘겼을 때 재귀함수를 무한 호출하거나 너무 큰 지역변수 혹은 매개변수를 사용할 때 ~와 같은 상황이면 스택/큐 중에 뭘 쓰는게 나은가? 스택의 활용 웹 브라우저 방문기록, 역순 문자열 만들기, 수식의 괄호 검사*, 메모리의 스택영역* 큐의 활용 우선순위..

프로세스와 스레드란? 프로세스 : 실행 중에 있는 프로그램을 의미로 스케줄링의 대상인 task(작업)과 같은 의미로 사용된다. 각각 독립된 메모리 영역을 할당받고, 프로세스마다 최소 1개의 스레드(메인스레드)를 가진다. 각 프로세스는 별도의 주소 공간에서 실행되어서 다르 프로세스의 변수나 자료구조에 접근할 수 없다. 한 프로세스가 다르 프로세스에 접근하려면 IPC를 사용해야 한다.(inter process communication) 스레드 : CPU 사용의 기본 단위로, 프로세스 내에서 실행되는 여러 흐름의 단위다. 프로세스 내에서 각각 stack만 따로 할당받고 code, data, heap은 공유한다. 스레드가 여러 개면 멀티스레드이고, 멀테스레드에서는 각 스레드끼리 프로세스의 일정 메모리를 공유한다..

DBMS란? 데이터베이스 관리 시스템. MySQL, Oracle 등등 RDBMS란? 관계형 데이터베이스 시스템으로 key와 value들의 간단한 관계를 테이블화 시킨 데이터베이스다. 각각의 테이블끼리 서로 관계를 맺을 수 있다. 정규화와 반정규화가 뭔가? 정규화 : 불필요한 데이터를 제거하고 중복을 최소화해서 각종 이상 현상을 방지하는 것. 반정규화 : 시스템 성능을 향상시키기 위해 데이터 모델을 통합하는 과정. 정규화를 하면 정합성과 데이터 무결성이 보장되지만 테이블이 복잡해지고 성능이 떨어질 수 있다. 반정규화는 테이블이 단순해지고 성능이 향상되는 반면 정합성과 데이터 무결성이 보장되지 않을 수 있다. *데이터 무결성 대표적으로 참조 무결성이 있는데 두 테이블의 데이터가 항상 일관된 값을 갖도록 유지..