Week 9250301(Sat)Week 10250303(Mon)250304(Tue)250304(Wed)250305(Tue)250306(Thu)250307(Fri)250308(Sat)250309(Sun)Week 11250311(Tue)250312(Wed)250313(Thu)250314(Fri)Week 12250319(Wed)250320(Thu)Week 13250324(Mon)250325(Tue)250326(Wed)250326(Thu)
Week 9
250301(Sat)
- 솔리드 커넥션 웹 개발
Week 10
250303(Mon)
- PS
- 스택/큐 문제 4개 풀이
- 파이써닉이란 무엇일까…
- deque는 기본적으로 append(), appendleft(), pop(), popleft(), rotate()등으로 사용
- 외우기 쉽고 직관적이다
- 접근은 항상 pop할 필요는 없고 deq[0] 방식으로 접근 가능하다
- 아마 구현이 배열 circular queue 방식으로 구현되서 그렇게 접근이 가능한걸로 보인다
250304(Tue)
- AWS Technical Essentials 강의 수강
- AWS 소개
- AZ, 리전, 가용성
- 웹 콘솔, AWS CLI, SDK
- 공동 책임 모델
- 루트 사용자 → MFA 적용하고 사용 지양
- IAM, 사용자, 그룹, 정책
- AWS 컴퓨팅
- 가상 머신, 컨테이너, 서버리스
- EC2
- 컨테이너: 이동성이 높음(모든 종속성이 컨테이너에 패키징 되기에)
- 서버리스: Fargate, Lambda
- AWS 네트워킹
- VPC: 이름, 리전(모든 AZ에 걸쳐있다), CIDR(16~28범위)
- 서브넷: VPC, AZ, CIDR, 퍼블릭/프라이빗 여부
- 고가용성을 위해 2개 이상의 AZ에 2개 이상의 서브넷 사용
- 예약된 IP: 서브넷에 5개의 IP가 자동으로 예약된다
- 10.0.0.0: 네트워크 주소
- 10.0.0.1: VPC 로컬 라우터
- 10.0.0.2: DNS 서버
- 10.0.0.3: 향후 사용
- 10.0.2.255: 네트워크 브로드캐스트 주소
- 게이트웨이
- 인터넷 게이트웨이: VPC를 인터넷에 연결. 모뎀 느낌
- 가상 프라이빗 게이트웨이: VPC를 다른 프라이빗 네트워크에 연결
- AWS Direct Connect: 온프레미스 데이터센터와 Amazon VPC간 물리적 보안 연결
- 라우팅 테이블: 인터넷 게이트웨이를 통해 VPC로 들어온 요청이 올바른 서브넷을 찾아갈 수 있게 라우팅 하는 것
- 서브넷이 퍼블릭인지 프라이빗인지는 사실 라우팅 테이블에서 결정한다
- VPC 보안
- ACL: 서브넷 수준의 방화벽
- 보안 그룹: EC2 수준의 방화벽
- AWS 스토리지
- 파일 스토리지, 블록 스토리지, 객체 스토리지
- EFS: 자동 확장, Standard/One Zone 지정 가능
- FSx: 고성능 파일 시스템
- 인스턴스 스토어, EBS
- AWS 기반 데이터베이스
- RDS, DynamoDB, ElastiCache, MemoryDB for Redis, DocumentDB, Keyspaces, Neptune, Timestream, QLDB
- DynamoDB: 테이블 - 항목 - 속성
- 모니터링, 로드 밸런싱 및 규모 조정
- AWS CloudWatch: 그룹 - 스트림 - 이벤트
- Elastic Load Balancing
- EC2 Auto Scaling
- Amazon Bedrock Getting Started 강의 수강
- Amazon Bedrock
- 솔리드 커넥션 웹 개발
- 보고된 오류 수정
250304(Wed)
- PS 문제풀이
- 스택/큐 문제, 힙 문제, 해시 문제 총 7개 풀이
- 자바 강의 week1-1, week1-2 수강
250305(Tue)
- SQL 학습
- sqld 공부도 해보면 좋을 듯
- where 조건문에 in, some, all, exists, unique 사용 가능
- 내림: floor
- 올림: ceil
- 반올림: round
- round(x, 2): 소수점 2번째에서 반올림
- 버림: truncate
- floor와의 차이는 음수에서 날듯?
- 몫 div 나머지 mod
- PS 문제풀이
- SQL sum, max, min 3문제 풀이
- aggregation을 조건문에서 쓰려면 바로 쓸 수 없고, where price = (select max(price) from ~ ) 처럼 사용해야 한다
- group by 가 있을때 들어갈 수 있는 attribute는 aggregation functions이거나 group by list에 들어있어야 한다
- 아니면 having
- is null 2문제 풀이
- group by 2문제 풀이
250306(Thu)
- 솔리드 커넥션 웹 개발
- 회원가입 페이지 일부 제작
- 강의 수강
- 기계학습
- 컴퓨터보안
- OS
- PS
- SQL 7개 풀이, 그리디 문제 1개 풀이
250307(Fri)
- 솔리드 커넥션 웹 개발
- 회원 가입 페이지 제작
- Input 컴포넌트화
- 지원서 관련 기능 변경
- 솔리드 커넥션 서버
- AOP를 사용한 관리자 권한 체크 리뷰
- SQL 문제 10개(select 5, group by 5) 풀이
- RANK()와 PERCENT_RANK()
- RANK() OVER (ORDER BY size DESC) AS rank
- 같은 값이 있으면 순위는 높은값으로 측정되고 그만큼 아래에 빈 순위가 생긴다
- PERCENT_RANK() OVER (ORDER BY size_of_colony DESC) AS percent_rank
- 가장 높은 랭크가 0.0, 가장 낮은 랭크가 100.0이 됨
- format_date(d, ‘%Y-%m-%d’)
- 리엑트 서버 컴포넌트와 Next.js App Router에 대한 공부와 생각
- RSC… 와 RCC를 포함한 컴포넌트들은 트리형태로 json에 저장
- RCC가 로딩되어 있지 않았을 때는 대략 포인터처럼 가리키는 형식으로 저장되어 있음
- 왜냐면 함수들은 serializable하지 않기 때문
- Next.js App Router가 왜 좋은가
- RCC?나 데이터를 받아올때 스트림 형식으로 받아와진다
- 즉 전체를 기다리지 않아도 받아올때마다 바로 하나씩 로딩 가능
- 그리고 Lazy Suspend로 힘들게 동적 로딩 해주지 않아도 RCC 로딩시 자동으로 이게 적용이 되는 샘이니
- https://nextjs.org/docs/app/building-your-application/routing/loading-ui-and-streaming
250308(Sat)
- 소마 2차 코테
250309(Sun)
Week 11
250311(Tue)
- HeadVer 버저닝 기반 Vercel 자동 배포 구현기 글 작성
250312(Wed)
250313(Thu)
- REST API URL 규칙 글 작성
- mc-archieve 개발
- 스토리, 세션, auth 관련 컨트롤러 서비스 dto 엔티티 변경
- 연관관계 편의 메서드: 연관관계 엔티티 한쪽에서 설정해주면 반대쪽도 되는것
- 보통 주체가 되는 쪽에서 설정하게됨
- 보통 1:n에서 쓰니깐 그냥 n쪽에서 opp.getRel().add(this) 이렇게 하면 되는데
- 문제는 1:1에서는 그냥 반대쪽에서 setRel(this) 해줘야한다는 것
- 그러면 setRel이 public으로 생겨야 하는데… 그럼 반대쪽에서도 접근 가능
- 그래서 null인지 체크하거나 해줘야 하는데 이러면 못생겨진다 ㅇㅅㅇ
- c++ friend 같은건 없나… 싶기도하고 그냥 뭔가 마음에 안든다
- 이때 실제 db에 적용되는 orm은 그냥 주체가 되는 쪽에만 설정해주면 되는 것 같다
- 어떻게 생각하면 당연한거지만
- CASCADE하고 고아객체?를 잘 쓰는 것이 좋을듯
- 임베디드 필드에서 모두가 null이면 그 객체도 null로 하이버네이트에서 처리한다는 듯
- 지금은 이걸 해제하는 설정이 있다고 한다
- 사실 나의 경우에 문제는 해당 객체 자체는 nullable이되, null이 아니면 내부의 특정 필드는 필수가 되게 하고 싶었는데… 딱히 글이 나온건 못본듯
- 사실상 nullable한게 맞기도 하니깐 일단 그냥 내부 필드를 nullable로 바꾸었다
- bruno 추가했다. 레포지토리랑 같이 가도 좋을듯. 왜냐면 형상관리도 같이 가니깐
250314(Fri)
- 솔리드 커넥션 웹 개발
- 4-1학기 1~2주차 강의 되짚어보기
- 자바
- 그냥 자바…
- 클라우드 컴퓨팅
- aws builders 강의. 이미 들었던거라 그대로 제출
- 기계학습
- ML이란: 기존에 로직을 이해하고 분석해서 프로그램을 짜 결과를 내놓았던것과 달리 학습해서 결과를 내놓음
- 데이터 분배: training, validation, test에 사용
- 학습의 종류: supervised, unsupervised, semi-supervised, reinforcement
- supervised learning: classification과 regression으로 나뉜다. 하지만 결국 이를 변형하면 같은 것
- linear regression, cost function(mae, mse 등등…)
- training, parameter space, gradient descent
- 컴퓨터보안
- 보안의 이론적 배경 지식들? 그냥 다 알던 것
- 과거(고대?)의 암호화
- Caesar Cipher, Playfair Cipher 등. language redundancy
- 정수론? 유클리드 호제법등, 공배수 공약수등에 대해
- OS
- 과거 OS, 따로 IO 컴퓨터를 두던 이유, 현대까지의 OS 발전과 그 배경
- OS 구조, system bus, I/O 방식(polling, interrupt-driven), 그리고 더 많은 interrupt, DMA
- system service, system call, user/kernal mode, os structure(ms-dos, unix(mono), layered, microkernel)
- proccess
- program vs. process, uni/multiprogramming, multiprocessing
- PCB, process state, state transition
- scheduler: short-term/long-term scheduler, context switch
- process creation: building from raw/duplicating, how linux’s process works
Week 12
250319(Wed)
- 선착순 쿠폰 시스템 설계 공부
- 문제
- 더 많은 쿠폰이 발행될 때
- 많은 요청으로 쓰루풋 초과 → 오류 가능, 다른 서비스도 영향 가능
- 해결법
- 락 → 처리 가능량이 매우 저하됨
- 단일 스레드 → 처리량 저하
- 단일 스레드 레디스에서 카운터만 추가
- 궁금증 → 단일 인스턴스 기준으로 카운터용으로만 싱글 스레드로 처리하면 안되나?
- 솔리드 커넥션 웹 개발
250320(Thu)
- 일급 컬렉션
- 컬렉션을 랩핑한것
- 장점
- 비즈니스에 종속적인 자료구조
- 컬렉션 불변성 보장
- 원래는 final로 선언해도 재할당만 가능하지 내부 값은 수정 가능
- 상태와 행위를 한곳에서 관리
- 의존성 주입(DI)
- 외부에서 객체간의 관계를 설정해주는 디자인 패턴
- A객체가 B객체를 사용할 때 A는 B에 의존성이 있다
- 이 경우에 두 클래스가 강하게 결합되게 된다
- B → C로 바꾸려면 코드를 바꿔줘야 한다
- 이에 대한 해결법으로 상속이 있겠지만, 상속은 제약이 많고 확장성이 떨어진다
- B→C로 바뀌면 A→A2로 바뀌는 문제가 생긴다는 뜻
- 이는 결국 객체들끼리 관계를 맺는 것이 아닌, 클래스 끼리 관계를 맺기 떄문에 그렇다
- B, C의 인터페이스를 만들고 다형성을 살리면 된다
- 예를들어 A의 생성자에서 B, C 인터페이스 타입을 입력받으면 된다
- 여기서 스프링 컨테이너는 어플리케이션 실행 시점에 객체(빈)을 만들어 주입시켜준다
- 주입할 객체를 계속 만들고 소멸 시키면 성능이 부담이 되니 싱글톤을 주로 사용하게 되었다
- 생성자 주입을 사용해야 하는 이유
- 생성자의 호출 시점에 1회 호출 되는 것이 보장된다
- 즉 주입받는 객체가 변하지 않거나, 주입이 필수적인 경우에 이를 보장해줄 수 있다
- 보통 의존 관계의 변경이 필요한 경우는 거의 없기에 객체의 불변성을 보장해줄 수 있다
- 스프링에서도 생성자 주입을 권장하기에, 생성자가 1개인 경우
@Autowired
를 생략해도 주입이 가능하도록 해주고 있다 - 테스트 시에 유리하다
- 컴파일 시에 객체를 주입해 테스트 코드 작성이 가능하다
- 다른 주입을 사용하면 테스트가 스프링 프레임워크에 과하게 의존하게 될 수 있다
- 그럼 단위 테스트가 아니게 될 수 있고, 컴포넌트 등록/초기화로 인해 테스트 비용이 증가한다
- 그렇다고 리플렉션을 사용하면 깨지기 쉬운 테스트가 된다
- 그리고 lombok + final 조합으로 사용하면 매우 간편하다
- 이러면 컴파일 시점에 누락된 의존성을 확인할 수도 있다
- 세터 주입, 일반 메소드 주입
- 주입받는 객체가 변경될 가능성이 있는 경우에 사용
- 즉 별로 안쓴다
- 필드 주입
- 그냥 필드에
@Autowired
를 붙여주면 기능한다 - 코드는 깔끔하나 별로 추천되지 않는데 외부에서 접근이 불가능하다는 단점이 있다
- 즉 테스트시에 별로이고, DI 프레임워크가 반드시 존재해야 하기에 사용을 지양해야 한다
Week 13
250324(Mon)
- 컴퓨터 보안 수업
- DES
250325(Tue)
- 기계학습 수업
- decision tree
- os 수업
- Thread Libraries 사용 예시
- CPU 스케쥴링
250326(Wed)
- 솔리드 커넥션 앱 개발
- 안드로이드 빌드, 심사
- 솔리드 커넥션 서버 개발
- 로그 수집 관련 공부
- LGTM 스택 공부
- 클라우드 컴퓨팅 수업
- 클라우드 기본 지식들 복습
250326(Thu)
- 솔리드 커넥션 서버 개발
- 모니터링 서버에 Loki 추가 Loki 도입하기
- 기계학습 수업
- decision tree, ID3, overfitting issue
- 컴퓨터 보안 수업
- AES
- OS 수업
- CPU Scheduling