서론
06/16 : 단위 프로젝트 (백엔드 커리큘럼)
06/17 : Ansible
06/18 : CircleCI
06/19 : Docker
06/20 : Logging & Monitoring
실습을 통한 DevOps의 주요 기술들을 살펴보는 한 주였습니다.
1. 내용정리
개념과 특징
개념과 특징
구성 요소
사용 순서
1. docker hub에서 계정 생성 및 로그인
2. 도커 이미지 다운로드
3. 도커 컨테이너 실행
4. 컨테이너 상태 확인
5. 컨테이너 삭제
6. 도커 이미지 삭제
명령어 저장소
| 도커 full 명령어 | 축약 명령어 |
|---|---|
| docker image pull | docker pull |
| docker image ls | docker images |
| docker container run | docker run |
| docker container start | docker start |
| docker container ls | docker ps |
| docker container stop | docker stop |
$ docker help : 도커 도움말
$ docker search --help : 도커 상세 사용 방법
$ docker search ubuntu : 도커 이미지 검색
$ docker image pull ubuntu : 이미지 다운로드 하기
$ docker image ls : 이미지 목록 보기
$ docker container run -d --name ubuntu_test ubuntu : 컨테이너 실행하기
$ docker container ls : 실행중인 컨테이너 목록 조회하기
$ docker attach ubuntu_test2 : 실행중인 컨테이너로 들어가기
$ docker container stop ubuntu_test2 : 실행중인 컨테이너 정지하기
$ docker container start 4b : 정지된 컨테이너 시작하기
$ docker container restart ubuntu_test2 : 컨테이너 재시작하기
$ docker container rm -f ubuntu_test2 : 컨테이너 삭제 시 -f 옵션 부여 후 삭제
$ docker container prune : 컨테이너 파기하기
$ docker image prune : 이미지 파기하기
$ docker run -d --name ubuntu_test3 ubuntu
$ docker ps -a
$ docker system prune
$ docker container run -it --name ubuntu_test3 ubuntu
$ docker container ls -a
$ docker container stats ubuntu_test3
`ctrl + C` : 실행 취소
개념과 특징
구성 요소와 구조
작동 흐름
1. 개발자가 GitHub에 코드 Push
2. CircleCI가 .circleci/config.yml을 읽고 작업 시작
3. 지정된 Job들을 실행 (ex. 빌드, 테스트, 배포)
4. 결과는 CircleCI 대시보드 또는 GitHub에서 확인 가능
2. 자격증 시험과 지필평가(오답노트)
6/20 SQLD 자격증 사전점수 발표
첫 자격증 시험 SQLD의 사전 점수 공개 발표가 있었습니다. 예상한대로 48점이라는 결과로 합격 기준 60점에 많이 못 미쳤고, 다음 자격증 시험 SQLD와 ADsP가 있는데 우선적으로 8월에 있는 SQLD 자격증 시험, ADsP시험은 11월달로 준비할 생각입니다.
백엔드 오답노트를 작성하며 개념을 다시 공부했습니다.
[3. 서블릿 주요 메서드]
- init(ServletConfig config) : 서블릿이 처음 생성될 때 한 번 호출
- service(ServletRequest req, SevletResponse res) : 클라이언트의 요청이 들어올 떄마다 호출, 대부분의 요청 처리 로직 사용
- HttpServlet을 상속받으면 doGet(), doPost() 등으로 분기됨
- destroy() 서블릿이 종료될 떄 호출, 리소스 정리 작업 등에 사용
[4. 클라이언트의 요청처리]
클라이언트의 GET 요청을 처리하는 메서드는 doGet()
클라이언트의 Post 요청을 처리하는 메서드는 doPost()
클라이언트의 Put 요청은 "없으면 만들고, 있으면 교체한다"는 의미
클라이언트의 DELETE 요청을 처리하는 메서드는
[6. JSP 실행 시 변환되는 파일]
Java Servlet로 변환됨
[8. 의존성 주입 주 목적]
객체 간 결합도 낮추기 위함
- 일반 자바코드에선 직접 new를 사용, Spring이 생성하고 주입하여 객체 생성
- 일반 자바코드에선 결합도가 높아 수정이 어렵지만, Spring에선 결합도가 낮아 유지보수와 테스트에 유리
- 일반 자바코드보다 Spring이 객체 교체가 쉬워 유연성이 낮음
[간단 예제코드]
자바 : UserService s = new UserService()
스프링 : @Autowired UserService s;
[10. @Autowired 자동 주입]
- Import 사용법
@Configuration
@Import(SecurityConfig.class)
public class AppConfig {
// SecurityConfig의 설정도 함께 적용됨
}
[15. JPA의 역할]
- 자바 객체와 데이터베이스 테이블을 매핑, @Entity로 선언한 클래스는 테이블이 되고, 클래스의 필드는 테이블의 컬럼이 됨
- 영속성 컨텍스트를 이용해서, 엔티티 객체의 상태를 자동으로 추적하고 변화가 생기면 DB에 반영
- 트랜잭션 처리와 캐시해서 안정성을 확보
- JPQL을 사용하여 SQL과 비슷하지만 객체 중심으로 질의하는 쿼리 언어도 제공, 그래서 DB에 종속되지 않는 코드를 짤 수 있음
[16. JPA에서 기본 키를 설정할 떄 사용하는 어노테이션]
@Id
@Key - 존재하지 않은 키워드
@Primary - 존재하지 않은 키워드
@Generated - 기본 키 값을 자동 생성할 때 사용
[18. JPA의 영속성 컨텍스트]
엔티티 객체를 관리하는 일종의 메모리 내 캐시 공간
엔티티 객체를 영속 상태로 관리하는 공간
데이터베이스와 자동으로 동기화
[19. REST API의 HTTP 메서드 ]
GET은 조회 - 서버의 상태나 데이터를 가져오기만 함
POST는 생성 - 서버에 새로운 리소스 생성 (중복 생성 가능 / 유일하게 역동성을 가지지 않음)
PUT은 수정 또는 생성 - 리소스 전체를 덮어쓰기
DELETE는 삭제 - 리소스 삭제
응답코드
200 OK = 데이터 있음
204 No Content = 데이터 없음
201 Created = 신규생성
[20. REST API]
Spring에서 REST API를 구현할 때 @RestController를 사용
[21. REST API]
주요 특징
- 간단하고 직관적이며 HTTP만 알면 쉽게 사용 가능
- 확장성으로 다양한 플랫폼과 언어에서 사용 가능
- 유연하여 JSON 또는 XML 사용
- GET /posts/123 등과 같이 URL로 자원 표현
[23. Spring Cloud]
Spring Cloud는 MSA를 쉽게 구현하고 운영할 수 있도록 지원하는 것
분산시스템에서 발생하는 다양한 문제들을 해결하기 위해 설계된 프레임워크
두 가지
- 핵심적인 컴포넌트는 Spring Cloud Gateway는 마이크로서비스 시스템 API 게이트웨이
- 구성 정보를 제공하는 서버 Spring Cloud Config Server
[24. Spring Cloud Gateway의 역할]
라우팅(Routing) : 클라이언트 요청을 적절한 마이크로서비스로 전달
필터링(Filter) : 요청/응답에 대해 인증, 로깅, 헤더 추가 등 전처리 및 후처리 수행
로드 밸런싱 : 여러 인스턴스 간에 트래픽 분산
보안 처리 : 인증/인가, 토큰 검증 등
서킷 브레이커 연동 : 장애 발생 시 fallback 처리 가능
[25. Spring Cloud Config Server의 역할]
구성 정보를 제공하는 서버
중앙 집중형 설정 관리: Git, S3, JDBC 등 외부 저장소에 설정 파일을 저장
환경별 설정 지원: application-dev.yml, application-prod.yml 등으로 환경 구분
실시간 설정 반영: Spring Cloud Bus 또는 Actuator를 통해 설정 변경을 서비스에 반영 가능
보안 강화: 민감한 설정 정보를 외부로 분리하여 관리
3. 마무리
회고를 통해 개념을 재학습하는 것은 좋았습니다.
루틴을 바로 잡고, 체력 관리에 신경 써서 학습 효율을 높일 생각입니다.
파이널 프로젝트를 앞둔 시점에 대비하여 현 프로젝트에 집중하며 부족한 부분을 보완할 생각입니다.
1일 1코딩
(커리큘럼) 06/17 ~ 07/17 : 데브옵스
08/09 : ADsP 자격증 시험
08/23 : SQLD 자격증 시험
07/18 ~ 09/10 : 기업 참여 프로젝트