25년 3월을 돌아보며

Published
March 31, 2025
Last updated
Last updated March 27, 2025
Tistory
Category

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)

          • 선착순 쿠폰 시스템 설계 공부
            • 문제
                1. 더 많은 쿠폰이 발행될 때
                1. 많은 요청으로 쓰루풋 초과 → 오류 가능, 다른 서비스도 영향 가능
            • 해결법
              • 락 → 처리 가능량이 매우 저하됨
              • 단일 스레드 → 처리량 저하
              • 단일 스레드 레디스에서 카운터만 추가
              • 궁금증 → 단일 인스턴스 기준으로 카운터용으로만 싱글 스레드로 처리하면 안되나?
           
          • 솔리드 커넥션 웹 개발

          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)

           
          • 기계학습 수업
            • decision tree, ID3, overfitting issue
          • 컴퓨터 보안 수업
            • AES
          • OS 수업
            • CPU Scheduling