본문 바로가기

전체 글323

CS 관련 면접 질문 정리 (OS) 1. OS의 정의 = 응용 프로그램과 하드웨어 사이에서 하드웨어를 조작하여 응용 프로그램에 필요한 자원을 할당하고 응용 프로그램이 올바르게 실행되도록 관리하는 소프트웨어  2. 커널(kenel) = OS의 핵심부 3. 동기, 비동기 차이 = 데이터의 요청과 결과가 한 자리에서 동시에 일어나는것, 동시에 일어나지 않는 것 4. 문맥 교환(Context Switching) - 기존에 실행 중인 프로세스의 문맥을 PCB에 백업한 뒤 중단하고 새로운 프로세스의 문맥을 PCB로부터 복구하여 새로운 프로세스를 실행하는 과정 => 여러 프로세스가 끊임없이 빠르게 번갈아 가며 실행되는 원리- 문맥(Context) = 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보- PCB(Process Control block.. 2023. 1. 16.
CS 관련 면접 질문 정리 (Java) 1. Java 컴파일 과정★ 자바 파일을 자바 Compiler가 바이트 코드로 변환하면 Class Loader가 자바 바이트 코드를 JVM 런타임 데이터 영역에 로드하고 실행 엔진이 최종적으로 자바 바이트 코드를 실행- 개발자가 .java 파일 생성 후 build- build한 java 파일을 java 컴파일러(javac)가 해석하여 바이트 코드(.class)로 변환- 변환한 바이트 코드 파일을 Class Loader가 JVM 내부에 로딩(적재)- 로딩된 class 파일들을 실행 엔진을 통해 컴퓨터가 읽을 수 있는 기계어로 해석하여 Runtime Data Area에 배치한 후 수행 ※ 런타임 데이터 영역(Runtime Data Area) = JVM이 프로그램을 실행하기 위해 OS로부터 할당받은 메모리 영.. 2023. 1. 16.
CPU 스케줄링 정의 - OS가 프로세스들에게 공정하고 합리적으로 CPU 자원을 배분하는 것 => 우선순위가 높은 프로세스를 빨리 처리해야 효율적 (우선순위는 PCB에 명시됨) 프로세스 종류 - CPU 집중 프로세스 = CPU 버스트가 많은 프로세스 (CPU를 많이 사용해야하는 프로세스) ※ CPU 버스트 = CPU를 이용하는 작업 - 입출력(I/O) 집중 프로세스 = 입출력 버스트가 많은 프로세스 ※ 입출력(I/O) 버스트 = 입출력장치를 기다리는 작업 => 입출력 집중 프로세스의 우선순위가 CPU 집중 프로세스의 우선순위 보다 높음 스케줄링 큐 - 실행될 프로세스들이 여러 개가 있으면 큐에 삽입되고 그 중에서 하나만 우선 실행되고 나머지는 CPU가 자유로워질 때까지 큐에서 대기하는 방식 (일반적으로 선입선출(FIFO.. 2023. 1. 16.
MySQL 코테에 자주 쓰이는 함수들 IFNULL(컬럼, A) = 해당 컬럼의 데이터가 NULL일 경우 A로 표시 IF(조건, 참일 경우 값, 거짓일 경우 값) = 조건문 CASE WHEN 조건 THEN 참일 경우 값 (ELSE 거짓일 경우 값) END = 조건문 (WHEN~THEN 여러개 입력 가능) YEAR(), MONTH(), DAY(), HOUR(), MINUTE(), SECOND() = 해당 컬럼의 데이터에서 해당 날짜 데이터 추출 DATE_FORMAT(컬럼, 설정) = 해당 컬럼의 데이터에서 설정한 포맷에 맞추어 날짜 데이터 추출 => 보통 "%Y-%m-%d"를 주로 사용 (2023-01-16 형태) DATEDIFF(날짜 데이터1, 날짜 데이터2) = 두 날짜 데이터의 차이(데이터1-데이터2, 일 단위) 계산 (당일을 포함하려면 .. 2023. 1. 16.
CS 관련 면접 질문 정리 (네트워크) 1. REST(Representational State Transfer)Client와 Server 사이의 통신 방식 중 하나로 HTTP URI로 리소스를 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 리소스에 대한 CRUD 기능을 적용하는 것을 의미하며 REST API는 REST를 기반으로 어떤 서비스에 대한 API를 구현한 것- URI(Uniform Resource Identifier) = 특정 리소스를 식별하는 통합 자원 식별자- API(Application Programming Interface) = 응용 프로그램에서 OS나 프로그래밍 언어의 기능을 조작하여 데이터를 주고받기 위한 방법을 정의한 인터페이스  (Client와 Server 간의 통신 방법을 정의.. 2023. 1. 4.
스레드 스레드(Thread) - 프로세스를 구성하는 실행 흐름의 단위 - 하나의 프로세스는 하나 이상의 스레드를 가질 수 있음 - 단일 스레드 프로세스, 멀티 스레드 프로세스가 존재 - 멀티 스레드 프로세스에서 스레드들은 실행에 필요한 최소한의 정보만을 유지한 채 프로세스 자원을 공유하여 실행됨 구성 요소 - 스레드 ID - 레지스터 값 (프로그램 카운터 포함) - 스택 멀티 프로세스와 멀티 스레드 - 멀티 프로세스 = 동일한 작업을 수행하는 단일 스레드 프로세스를 여러 개 실행하는 것 - 멀티 스레드 = 하나의 프로세스를 여러 스레드로 실행하는 것 차이점 멀티 프로세스 멀티 스레드 프로세스끼리는 기본적으로 자원을 공유 X => 서로 독립적으로 실행 스레드끼리는 같은 프로세스 내의 자원을 공유 => 협력과 통신.. 2023. 1. 4.
프로세스 프로세스(Process) - 메모리 상에서 실행 중인 프로그램 - 프로그램은 실행되기 전까지는 그저 보조기억장치에 저장되는 데이터 덩어리지만 프로그램을 메모리에 적재하고 실행하는 순간 프로그램은 프로세스가 됨 - 프로세스들은 차례대로 돌아가며 정해진 시간만큼 CPU를 이용하고 시간이 종료됐음을 알리는 타이머 인터럽트가 발생하면 차례를 양보하고 다음 순서를 기다림 종류 - 포그라운드 프로세스(Foreground Process) = 사용자가 볼 수 있는 공간에서 실행되는 프로세스 => 앱 - 백그라운드 프로세스(Background Process) = 사용자가 보지 못하는 뒤편에서 실행되는 프로세스 - 데몬(Daemon), 서비스(Service) = 사용자와 상호작용하지 않고 정해진 일만 수행하는 백그라운드 .. 2023. 1. 2.
운영체제의 정의 운영체제(OS, Operating System) - 실행할 프로그램에 필요한 자원을 할당하고 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램 - 응용 프로그램과 하드웨어 사이에서 하드웨어를 조작하여 응용 프로그램에 필요한 자원을 할당하고 응용 프로그램이 올바르게 실행되도록 관리하는 소프트웨어 => OS가 없다면 하드웨어를 조작하는 코드를 개발자가 직접 작성해야 함 - 응용 프로그램 (Application Program) = 사용자가 특정 목적을 위해 사용하는 일반적인 프로그램 - 메모리 관리 = OS는 실행할 프로그램을 메모리에 적재하고 더 이상 실행되지 않는 프로그램을 메모리에서 삭제하며 지속적으로 메모리 자원을 관리 - CPU 스케줄링 = 최대한 공정하게 여러 프로그램에 CPU 자원 할당 (우선순.. 2023. 1. 2.
엔코아 플레이데이터 빅데이터 부트캠프 수료 후기 수료식은 지난주 금요일에 파이널 프로젝트를 끝내고 나서 바로 진행했지만 올해의 마지막날인 만큼 귀중했던 엔코아 플레이데이터 빅데이터 부트캠프 수료 후기를 남겨볼까 한다. 결론부터 간단하게 한 문장으로 요약하자면 기대 이상으로 너무 만족스럽고 무사히 수료했다는 사실이 너무 뿌듯한 최고의 부트캠프였다. 솔직히 등록하기 전에 부트캠프라는 것을 처음 알아봤을때는 학원을 잘못 선택하여 다니게 되면 매니저나 강사들이 대충 가르치고 관리를 소홀히 한다는 몇몇 부정적인 후기들을 보았기에 자세히 조사해보고 등록한 부트캠프였음에도 조금 불안한 마음이 없지는 않았는데 괜한 기우였다는듯 기본적으로 쾌적하고 최신 장비들이 갖춰진 교육 환경 및 시설, 열정적이고 헌신적인 최고의 매니저님들과 강사님들의 관심과 노력 덕분에 초보자에.. 2022. 12. 31.
마신사 프로젝트 4주차 (빅데이터 부트캠프 116~120일차) 마신사 프로젝트 22일차 - 2022.12.19(월) 오랜만에 다같이 학원에 오프라인으로 모여 작업을 했는데 오프라인이라 바로 프론트를 맡은 팀원들에게 바로 질문하고 답변을 들을 수 있어서 네아로 구현에 대한 윤곽이 드디어 잡히기 시작했다. 알고보니 주말동안 내가 찾았던 정보들은 React 사용 없이 Spring Boot만을 이용하여 작업할 수 있는거라 적용 불가능하였고 결국 나 스스로 방법을 찾아내야했다. 그렇게 프론트 팀원들과의 잦은 대화를 통해 네아로 실행 과정을 겨우 이해할 수 있었는데 다음과 같았다. 겨우 과정을 이해하고 작업을 시작했는데 처음부터 난관에 부딪쳤다. 접근 토큰이 보안상 JSON 객체로 반환되지 않고 요청시에 URL 주소값이 바뀌면서 반환되는 것이었는데 (처음에는 user.id로 .. 2022. 12. 24.
Docker 기본 명령어 ※ docker 미설치 상태 시 => apt install docker.io sudo service docker restart = docker 재시작 docker build -t [image명] . = 현재 위치에 있는 dockerfile를 이용하여 이미지 생성 docker run -p [포트번호:포트번호] [image명] = 해당 포트번호로 지정 이미지 참고하여 docker container 생성 후 실행 docker run --name [container명] [image명] = 지정한 이름으로 container명 설정 후 실행 docker run -d [container ID] = 해당 container 백그라운드 실행 docker run -e [환경변수 설정값] [container ID] = 지정한.. 2022. 12. 21.
마신사 프로젝트 3주차 (빅데이터 부트캠프 111~115일차) 마신사 프로젝트 15일차 - 2022.12.12(월)멘토님이 조언해주신대로 마스크와 회원 같은 핵심 데이터와 관련된 DELETE 메소드들을 PUT을 이용하여 상태만 바꾸는 방식으로 변경하기로 결정하였고 일부 테이블에 데이터 삭제와 관련된 deletion이라는 컬럼을 추가하며 DB를 수정하였다.  DB 수정으로 인하여 기존에 작성하였던 DTO와 Entity 그리고 이들과 관련 메소드들에 대한 코드 역시도 수정해야 하다보니 오늘은 아직 정의하지 못한 메소드들의 코드를 작성하는 것이 아닌 기존 코드들을 수정하는 작업으로 대부분의 시간을 보냈다.작업 진행중 deletion 컬럼 정의시 데이터 값이 2개(Y/N) 밖에 존재하지 않도록 정했기에 해당 컬럼은 Enum을 이용하여 Entity와 DTO에 정의했는데 작업.. 2022. 12. 17.
MyBatis 세팅 application.properties # myBatis mybatis.config=mybatis-config.xml // MyBatis 환경설정 xml파일 지정 mybatis.type-aliases-package=com.spring.masinsa.entity // Mapper XML 파일에 resultType 클래스의 패키지를 안적고 클래스명만 써도 되게 해줌(엔티티가 하나의 패키지에 모여 있을때 유용) mybatis.mapper-locations=mybatis/mapper/*.xml // MyBatis Mapper 파일 위치 지정 mybatis-config.xml - src/main/resources에 mybatis 폴더 생성 -> mybatis 폴더에 mybatis-config.xml 생성 Map.. 2022. 12. 13.
마신사 프로젝트 2주차 (빅데이터 부트캠프 106~110일차) 마신사 프로젝트 8일차 - 2022.12.5 (월) 새롭게 완성한 유저스토리를 토대로 본격적인 화면 구성 설계 작업에 들어갔다. 프로젝트 2일차때 이미 한번 진행했던 작업이었지만 멘토님의 조언을 바탕으로 더 명확하고 자세하게 유저스토리가 수정되었기 때문에 기존의 화면 구성 설계 또한 수정이 필요하였고 수정된 유저스토리에 부합하는 화면 구성에 대한 레퍼런스들을 찾아보며 오전에는 3개의 페이지에 대한 화면 구성을 완료하였다. (확실히 2일차때 한번 설계해본 경험이 있어 처음보다는 빠른 속도로 진행할 수 있었다.) 오후에는 나머지 페이지들에 대한 화면 구성을 완료한 후, 기능 정의서를 작성하여 각 페이지마다 필요한 기능들과 정리하였고 이를 바탕으로 우리에게 필요한 기술 스택들 역시 정리하며 7일차 작업을 마무.. 2022. 12. 10.
마신사 프로젝트 1주차 (빅데이터 부트캠프 100~105일차) 마신사 프로젝트 진행 전에 정해졌던 것들 - 역할분배: 백엔드 2명, 프론트엔드 2명, 데이터(머신러닝) 1명 => 나는 백엔드를 맡았다. - 목표 : 웹서비스 구현하기 마신사 프로젝트 전 멘토링 - 2022.11.26(토) 우리 팀의 멘토님은 일종의 관리직으로 사이트의 전반적인 웹 개발을 총괄하시는 경력 많으신 개발자셨다. 경력도 많고 커머스 분야에서 오래 종사하시다 보니 프로젝트 진행시 초기 기획 단계의 중요성을 강조하셨고 Why -> How -> What이라는 키워드와 관련된 영상 링크를 제시해주며 "IT 개발자는 단순히 코딩만 하는 사람이 아니다" 라는 것을 명심하라 하셨고 프로젝트 기획에서는 "우리의 목적과 비슷한 곳들을 비교해봤을때 많은 곳들에 있는 기능 혹은 화면이니까 우리도 이 기능 혹은 .. 2022. 12. 3.