일단 씻고 나가자

23.05.17 본문

Study/닥치는 대로 주워 담기

23.05.17

일단 씻고 나가자 2023. 5. 18. 02:59

2023. 05. 17 수요일

 

- [Spring] 스프링이란? 스프링의 3가지 특성? 스프링 부트란?

: 스프링이란 앤터프라이즈급 애플리케이션 개발에서 개발자가 비즈니스 로직에만 집중할 수 있도록 다양한 기능을 제공하는 프레임워크.

 

스프링의 3가지 특성에는 제어 역전, 의존성 주입, 관점 지향 프로그래밍이 있다.

 

스프링 부트란 다양한 기능 제공을 위해 복잡한 환경 설정이 선행되어야 하는 스프링의 단점을 보완하고자, 각 개발의 모듈의 버전 및 연관된 라이브러리들의 호환 버전까지도 한 데 묶어 호환되는 모듈 조합을 제공한다.

 

 

- [Git] rebase의 진행 과정?

: rebase는 어떤 commit에서 branch가 나뉘어 서로 다른 코드를 작성하기 시작했을 때, 기존 base였던 최초의 commit에서 합치고자 하는 branch의 최신 commit으로 base를 옮기는 기능이다. 이때도 두 코드가 같은 부분을 수정했다면 merge처럼 conflict가 난다.

이때의 conflict는 합치고자 하는 branchcommit을 순서대로 따라오며 병합한다.

 

예시로 base라는 commit 객체가 있다고 하자. basemaster branch에 존재했으며, 이후로 rebase라는 branch가 생성되고, rebase branchbase1, base2 라는 새로운 commit을 만들었고 mastermaster1이라는 commit을 만들었다 가정하자.

이때 rebasemaster branchrebase 하고자 한다면, git은 임시 공간에 base-base1, base1-base2 간의 차이점을 패치 형태로 저장한다. 그리고 이 패치를 mastermaster1 객체와 merge 하는데, 이때 base-base1master1과의 conflict가 발생하여 사용자에게 처리를 맡긴다. (처리가 됐다면 git add [파일명], 이후 git rebase continue)

그렇게 되면 base1master1merge된 새로운 내용의 commit 객체가 된다.

이후 같은 과정으로 base1-base2 간의 패치와 master1을 검사한다. 모든 과정이 완료가 되면 rebase가 가지고 있던 brach들의 flow는 모두 사라지고, master1을 부모로 한 직렬 flow가 완성된다. (base master1(master) base1 base2(rebase))

 

 

- [Effective Java] 클래스 getter/setter 캡슐화 이유? 배열을 safe 하게 하는 방법?

: public으로 열 때 thread safe 하지 못하다. (lock 류의 작업이 안 됨)

 

배열을 safe 하게 하는 두 가지 방법

1. List/Map..<> value = Collections.unmodifiableList/Map..(Arrays.asList(arr))

// 해당 객체는 read only가 되며, 수정 및 추가 시 exception을 발생시킨다.

원본 수정 시 같이 변경.

 

2. return arr.clone()

// 해당 시점으로 clone 되며, 원본이 바뀌어도 다시 return 하지 않으면 변경 안 됨.

 

 

- 표준 입출력 3가지? 표준 입출력을 바꾸는 2가지?

: 프로세스는 탄생 시에 3가지 스트림을 가지고 있다.

표준 입력 스트림 (Standard Input Stream stdin)

표준 출력 스트림 (Standard Output Stream stdout)

오류 출력 스트림 (Standard Error Stream stderr)

일반적으로 표준 출력 및 오류 출력 스트림은 plain text(순수 텍스트)console에 출력.

 

때에 따라 설정된 입출력을 바꿔야 하는 경우가 있다.

1. 리다이렉션 (redirection)

// >, < 기호를 사용. 일종의 입력, 출력 경로를 바꿔주는 기능.

예를 들어 cmd에서 ls를 입력하면 현재 console에 해당 파일 목록을 보여주는데,

이를 ls > practice.txt 로 적으면 practice라는 text 파일을 만들어 해당 내용을 저장한다.

반대로 head < practice.txt 로 적으면 앞 10라인까지만 보여주는 head의 명령어에 파일이 들어가 파일의 첫 10라인을 보여줌.

// 추가로 >>, <<는 기존 출력 및 입력을 보존한 상태로 다음부터 추가.

 

2. 파이프 (pipe)

// | 기호를 사용. 출력 스트림을 다른 프로그램의 입력 스트림으로 연결.

예를 들어 ls | grep hello를 입력하면 현재 파일 목록인 ls에 대한 출력을

hello의 문자열을 포함하는 문자를 찾는 grep 명령에 입력돼 hello가 존재하는 명만 출력함.

 

 

- fore/background process? 각각을 제어하는 명령어 (종료, back list, back->fore)?

1. foreground process

// 쉘에서 해당 프로세스 실행 명령 후, 수행 종료까지 다른 입력이 불가능한 프로세스.

기본적으로 cmd에서 어떤 명령을 하게 되면 결과의 출력까지는 프롬프트가 뜨지 않음.

따라서 시간이 오래 걸리는 작업일 경우 사용자는 수행의 끝까지 기다려야 함.

 

2. background process

// 사용자의 입력과 상관없이 실행되는 프로세스.

시간이 오래 걸리는 프로세스를 실행하며 새로운 프롬프트를 받을 수 있다.

& 기호를 쓰며, 명령의 마지막에 붙여준다. (ex. find / -name ‘*.py’ > list.txt &)

수행이 끝나면 [순서 번호] [pid] 의 결과를 보여준다. (ex. [1] 57)

 

해당 프로세스를 종료하는 명령어는 ctrl + c를 누르면 되며,

background로 실행 중의 process들의 목록을 보여주는 명령어는 jobs,

background로 실행 중의 processforeground로 실행하는 명령어는 fg %[순서 번호].

'Study > 닥치는 대로 주워 담기' 카테고리의 다른 글

23.05.19  (0) 2023.05.20
23.05.18  (0) 2023.05.19
23.05.16  (1) 2023.05.17
23.05.12  (0) 2023.05.13
23.05.11  (0) 2023.05.12