안녕하세요. 다메카솔🐿️ 입니다.

얼마전에 계속 공부하고 싶었던 쿠버네티스를 공부하면서, 프로젝트에 사용하는 것 외에 어떻게 더 활용할 수 있을까 고민하다가 공식인증 자격시험인 CKAD를 응시하였습니다.

 

개발자에게 자격증이 도움이 된다 안된다는 여러가지 의견이 있는데 저는 실무능력도 중요하지만, 장기적으로 봤을 때 이론이 뒷받침 되어야 이해도도 높아지고 더 어려운 문제를 다룰 때 도움이 된다고 생각해서 이론 공부 + 공부 내용을 검증하기 위한 방법으로 자격증 시험 응시를 자주 하는 편입니다. 
CKAD는 기타 국내 자격증이나, AWS 자격증과 비교해도 많이 비싼 가격이라 과연 필요할까? 고민을 많이 했는데, 가장 최근에 봤던 시험이 작년 가을에 보았던 SAA라 시험 본 지 오래되기도 해서 응시하기로 결정하였습니다.

 


시험 정보

리눅스 재단은 오픈소스 소프트웨어 개발을 위한 공동 작업 환경을 구축하는 비영리 단체입니다. 리눅스 재단은 쿠버네티스 자격증 프로그램을 관리하고 있습니다.
https://www.linuxfoundation.org/


쿠버네티스 자격증은 쿠버네티스 기술에 대한 지식과 숙련도를 검증하는 전문 자격증입니다. 다음과 같은 다양한 종류의 자격증이 있습니다.
- Certified Kubernetes Administrator (CKA): 쿠버네티스 클러스터를 배포, 구성 및 관리하는 데 필요한 기술, 지식 및 역량을 검증하는 자격증입니다.
- Certified Kubernetes Application Developer (CKAD): 쿠버네티스에서 클라우드 네이티브 애플리케이션을 설계, 구축, 구성 및 노출하는 데 필요한 기술, 지식 및 역량을 검증하는 자격증입니다.
- Certified Kubernetes Security Specialist (CKS): 쿠버네티스에서 애플리케이션을 보호하기 위한 관련 보안 원칙을 구현하고 관리하는 데 필요한 기술, 지식 및 역량을 검증하는 자격증입니다.

https://kubernetes.io/ko/training/

 

교육

운영 수준의 컨테이너 오케스트레이션

kubernetes.io


이번에 응시한 시험은 CKAD 이며 
- CKAD는 리눅스 재단에서 제공하는 공식 쿠버네티스 자격증입니다.
- 시험은 온라인으로 진행되며, 2시간 동안 16개의 문제를 풀어야 합니다.(시험마다 다른 것 같습니다)
- 시험 점수는 100점 만점이며, 66점 이상을 획득하면 합격입니다.
- 시험 비용은 395달러(2024.05 기준)이며, 쿠폰을 사용하면 할인된 가격으로 응시할 수 있습니다

시험 과목: Certified Kubernetes Application Developer (CKAD)

CKAD는 쿠버네티스 환경에서 애플리케이션을 설계, 구축, 구성 및 노출하는 데 필요한 기술, 지식 및 역량을 검증하는 자격증입니다. 본 시험은 퍼포먼스 기반으로, 실제 쿠버네티스 환경에서 문제를 해결하는 능력을 평가합니다.

 


시험 범위:
- Core Concepts (13%)
    - 쿠버네티스 기본 아키텍처 이해
    - 쿠버네티스 오브젝트 정의 및 관리 (Pod, Deployment, Service, Namespace 등)
- Pod Design (20%)
    - Pod 생성 및 관리, 컨테이너 환경 설정
    - Pod 및 컨테이너 라이프사이클 관리
    - 리소스 사용량 관리, 헬스 체크, 로깅 및 모니터링 설정
- Configuration (18%)
    - ConfigMap 및 Secret을 사용한 애플리케이션 설정
    - Security Context, Resource Limits 및 Quotas 설정
    - 서비스 디스커버리 및 네트워킹 설정
- Observability (18%)
    - 애플리케이션 로그 수집 및 분석
    - 애플리케이션 및 쿠버네티스 클러스터 모니터링
    - 문제 해결 및 디버깅
- Deployment (20%)
    - Deployment, StatefulSet, DaemonSet 등 다양한 배포 방법 이해 및 활용
    - 롤링 업데이트, 롤백 및 블루-그린 배포 전략 구현
- Services & Networking (11%)
    - 쿠버네티스 네트워킹 기본 사항 이해
    - Service 오브젝트를 활용한 서비스 노출 및 디스커버리
    - Ingress 컨트롤러를 사용한 외부 트래픽 관리
더 자세한 과목 내용은 CKAD Exam Curriculum에서 확인할 수 있습니다.

https://training.linuxfoundation.org/certification/certified-kubernetes-application-developer-ckad/

 

Certified Kubernetes Application Developer (CKAD) | Linux Foundation

Teaching Certified Kubernetes Application Developers (CKAD) how to design, build, configure, and expose cloud native apps for Kubernetes.

training.linuxfoundation.org

시험 접수 팁


CKAD 시험은 온라인으로 진행되며, 리눅스 재단 웹사이트에서 접수할 수 있습니다. 시험 접수 시 다음과 같은 정보를 입력해야 합니다.

- 이름, 이메일 주소, 연락처
- 신분증 정보
- 시험 응시 날짜 및 시간

시험 접수 후, 시험 응시를 위한 안내 메일을 받게 됩니다. 안내 메일에 따라 시스템 설정 및 신분 확인 절차를 진행해야 합니다.

쿠폰 할인:
시험 가격이 비싸다보니 할인을 꼭 받으시는 걸 추천드립니다.
쿠폰은 여러 경로로 얻을 수 있는데, 가장 큰 할인폭은 블랙프라이데이의 사이버먼데이 행사에서 50% 할인 쿠폰을 구할 수 있고, 그 외에도 특정 기간마다 쿠폰을 제공하고 있습니다.
최신 정보를 업데이트 하는 사이트들이 많이 있으며, 제가 이용한 사이트는 다음과 같습니다.


https://github.com/techiescamp/linux-foundation-coupon

시험 준비 방법

공식 문서를 활용하여 공부하거나 리눅스 재단에서 CKAD 시험과 함께 판매하는 커리큘럼을 이용하는 방법도 있지만, 저는 많은 후기들이 추천하는 Udemy의 CAKD 강의를 활용하였습니다.

https://www.udemy.com/course/certified-kubernetes-application-developer/?couponCode=KEEPLEARNING

해당 강의에선 따로 실습환경을 구축하지 않아도 명령어들을 실행하면서 숙달시킬 수 있는 실행환경을 제공해주어서 공부에 큰 도움이 되었고, 강의도 핵심을 짚어주는 강의로 학습에 대한 부담을 크게 낮춰주었습니다.

또 Mock 시험을 제공해서 따로 dump를 풀거나 하는 준비과정 없이, 시험에 응시하였습니다.

시험을 접수하면 리눅스재단에서 killer.sh이라는 모의시험 응시 세션을 2회 제공하는데, 하나의 세션을 활성화시키면 총 3일동안 반복해서 응시할 수 있으며, 불합격 시 재시험을 고려하여 2회 제공하는 것으로 보입니다. 난이도가 상당한 것으로 유명한데, 직접 풀어보면 하나의 문제에 여러가지 요구사항이 포함되어 있으며, 쿠버네티스 외에도 기본적인 리눅스 활용능력도 필요하여 체감 난이도가 높게 느껴지는 것 같습니다.

killer.sh


그리고 시험 시간이 생각보다 타이트한데, 그래서 시간을 단축할 수 있는 여러가지 방법들을 준비하시는 것을 추천드립니다.
모든 yaml파일을 직접 작성하는 것보다 --dry-run=client -oyaml 명령어를 통해 기본 문법이 작성된 yaml을 생성하여 수정하거나, 공식 문서에 작성된 예제를 빠르게 찾아 활용하는 것이 큰 도움이 되었습니다.

또 난이도가 쉬운 문제를 틀리지 않는 것이 시험 합격에 도움을 주기 때문에, 조금 까다롭거나 시간이 걸릴 것 같은 문제는 flag 체크 후, 전체 문제를 모두 검토 후에 푸시는 것을 추천드립니다.

 

시험 후기

 

정확하게 기억이 나지는 않지만 생각나는 대로 기출문제 내용들을 적어보았습니다.

1. 카나리배포(기존에 deploy가 존재하며, 추가로 신규 버전을 배포할 예정인데 요구하는 비율로 배포되도록 작성)
2. cronjob 설정
3. docker 이미지 빌드 및 압축 (이름, 태그 , tar등)
4. networkPolicy가 구성된 환경에서 networkPolicy를 수정하지 않고 접속 이슈 해결
5. deployment 작성
6. secret 작성 및 container에서 keyRef로 활용
7. configmap 작성
8. container 내에 serviceAccount 설정
9. securityContext 설정 (root 권한상승 금지, 실행 유저 지정)
10. deploy 신버전 배포 및 롤백
11. api deprecation 이슈 해결(구버전 api 제공 후, 배포 이슈 해결, 공식문서 활용하여 문법과 api 버전 확인 필요)
12. log를 확인하고, 파일로 저장
13. ingress, egress 설정
14. 배포된 deployment에 서비스 생성하여 expose하기

다른 블로그 후기를 통해 큰 도움을 얻어 좋은 결과를 얻은 만큼, 다음 CKAD 시험을 준비하는 분들에게 도움이 되었으면 좋겠습니다.

모두 좋은 결과 얻으시길 바랍니다.

certificate

 

ckad badge

 

 

 

GitHub - techiescamp/linux-foundation-coupon: Latest Linux Foundation Coupon Codes For Certification, Courses, Skillcreds, IT P

Latest Linux Foundation Coupon Codes For Certification, Courses, Skillcreds, IT Professional Programs and Skillcreds - techiescamp/linux-foundation-coupon

github.com

 

 

Linux Foundation - Decentralized innovation, built with trust

Helping open technology projects build world class open source software, communities and companies.

www.linuxfoundation.org

 

안녕하세요. 다메카솔🐿️ 입니다.

지난 4.17일 PostgreSQL 100% 활용법 밋업에 참석하였습니다.

한동안 공부에 운동에 정신이 없어서 컨퍼런스 관련 정보를 찾아보지 못하고 있었는데, 갑자기 생각나서 찾아보니 평소에자주 사용하는 PostgreSQL 관련 밋업이 있어 바로 신청하였습니다.

신청하면서 개발자 입장에서 데이터베이스로 PostgreSQL와 mysql을 모두 사용해본 경험이 있지만, 둘의 차이가 뭘까? 생각했을 때 그냥 sql만 작성하고 제품 이름만 다르다, postgreSQL은 ORM에 친화적이다 정도로 아무것도 모르고 있다는 사실에 좀 충격받아서 기대를 가지고 참석하였습니다. 

 

https://www.meetup.com/pgmeetupseoul/events/300140824/

 

Login to Meetup | Meetup

Not a Meetup member yet? Log in and find groups that host online or in person events and meet people in your local community who share your interests.

www.meetup.com

아래는 밋업 정보입니다.

밋업 정보

[📣밋업 안내📣]

  • 일시
    2024년 4월 17일 수요일 18:30~20:30 (2시간)
  • 모집 일정
    2024년 4월 1일 ~ 4월 16일 (선착순)
  • 장소
    삼성역 섬유센터빌딩 2층 컨퍼런스홀 C3룸 (서울 강남구 테헤란로 518)
  • 식사
    샌드위치와 생수 제공
  • 후원
    비트나인
  • 참석비용
    무료

[🎁밋업 참석자 혜택🎁]

  • 참석자 혜택 1
    어디서도 들어볼 수 없는 생생한 PG 이야기를 실무자가 직접 들려드립니다.
  • 참석자 혜택 2
    현장 추첨을 통해 따뜻한 신상 도서를 선물로 드립니다.
    참석자 혜택 3
    추후 PostgreSQL Meetup Seoul 운영진으로 활동할 수 있는 기회를 드립니다.

[⏰밋업 시간표⏰]

  • 18:30 밋업 등록 및 식사
  • 18:50 환영인사
  • 18:55 보너스 세션: PostgreSQL Community 참여/기여 방법
  • 19:05 세션1: 실무에 적용하는 PostgreSQL 아키텍쳐 구성 방법
  • 19:35 세션2: PG Extension: 신개념 데이터 구조 저장: Apache AGE
  • 20:05 네트워킹
  • 20:30 마무리

아는 지인과 함께 세션을 등록하여 도착하였는데, 조금 일찍 도착하였음에도 사람들이 줄을 서 있었습니다.

대기 줄

앞에 계신 분은 함께 참석한 개발자분인데 초상권을 위해 모자이크 처리 하였습니다.

약간 사건 관계자 인터뷰 모자이크 느낌이 나긴 하지만 그림판으로 최선을 다했습니다...

 

줄을 서서 밋업 신청 확인을 하는데, 신청이 제대로 안되어있어 현장 신청을 하느라 조금 입장이 늦어졌습니다.

사진은 못찍었지만 맛있는 샌드위치랑 물을 주셔서 간단히 저녁 대용으로 먹고 세션을 기다렸습니다.

 

본격적으로 세션이 시작되기 전에, 오픈소스인 포스트그레 커뮤니티 대한 세션이 있었는데, 어떻게 기여할 수 있는지 절차를 설명해주시는 것을 보고, 항상 마음속으로만 있었던 많이 사용하는 오픈소스에 참여하여 개발자 생태계에 기여해보고 싶다는 생각이 다시 생기기 시작하였습니다.

항상 구체적인 방법이 너무 막막하였는데, 자세한 절차나 사례들을 설명해 주시니 한번 도전해볼까? 라는 생각이 들어 정보를 더 찾아봐야 될 것 같습니다.

 

세션에 관한 자세한 내용은 생략하고 두 세션 모두 열정적으로 발표해주셔서 시간가는 줄 모르고 들었습니다.

 

위 사진에 있는 좌석이 거의 만석이 될 정도로 많은 분들이 참석해주셨고, 세션 중간중간에 문답 시간에도 어려운 질문에도 상세하게 답변을 해주셔서 다음에 또 밋업이 있다면 참석할 예정입니다. 

안녕하세요. 다메카솔🐿️ 입니다.

이번에 읽은 책은 최근 관심이 많아진 아키텍처에 관련된 책입니다.

클린 아키텍처 책 표지

https://product.kyobobook.co.kr/detail/S000001033082

 

클린 아키텍처: 소프트웨어 구조와 설계의 원칙 | 로버트 C. 마틴 - 교보문고

클린 아키텍처: 소프트웨어 구조와 설계의 원칙 | 살아있는 전설이 들려주는 실용적인 소프트웨어 아키텍처 원칙 소프트웨어 아키텍처의 보편 원칙을 적용하면 소프트웨어 수명 전반에서 개발

product.kyobobook.co.kr

후기
독서기간 :  2024.03
독서시간 : 20H
평점 : ★★★★★
한줄평 : 구루의 경험으로 배우는 프로그래밍 설계의 교과서

클린 코드도 유명하지만, 클린 아키텍처 책도 개발 공부를 시작할 때 많이 추천받은 책이었습니다.
처음 읽었을 때는 아직 프로그램의 가장 작은 단위 코드들도 작성하는데 쉽지 않을 때라 책을 읽어도 바라보는 시각이 차이가 많이 나서 내가 직접 활용하기가 어렵다고 느꼈었습니다.
나중에 시간이 지나면서 구현이 아닌 설계, 객체지향, 함수형 프로그래밍, 그리고 설계 원칙(자바의 SOLID 등), 또 MSA 아키텍처나 비동기 프로그래밍, 의존성과 결합도 등 학습에 꾸준한 관심을 가지는 개발자들이라면 자주 볼 수 밖에 없는 지식들에 조금 익숙해졌을 때, 다시 한번 먼 이야기로 느껴지던 설계와 아키텍처에 대해 공부해보고 싶다는 생각을 했습니다.

많은 내용이 나오는 책이지만 조금 익숙해진 개념들이 자주 나오다보니 읽는데 정말 재밌게 읽었습니다.
특히 경력 30년차의 대선배가 옆에서 이야기해주는 것 같은 펌웨어까지 개발하던 시기에서부터 지금까지 시행착오를 거치며 발전한 아키텍처의 필요성이 교과서에서 보던 것과는 다르게 `만약 내가 그런 상황있더만 열마나 고생했을까?` 를 생각하며 읽다보니 몰입이 잘 되었던 것 같습니다.

기억남았던 내용들은, 절차지향 -> 객체지향 -> 함수형 프로그래밍이 나오게 된 기저에는 코드에 대한 제약이 있다. 무엇이 좋은 코드인지는 분명하지 않지만, 무엇이 오답인 지는 경험을 통해 알 수 있다. 이었습니다. 
선배 개발자들이 개발하면서 겪은 고통스러운 과정을 통해 절차지향은 제어흐름의 직접적인 전환에 대한 규칙(메모리의 goto 문), 객체지향은 제어흐름의 간접적인 전환에 대한 규칙(모듈에서 더 나아간 역할과 책임, 협력으로 이루어진 제어흐름), 함수형 프로그래밍은 할당문에 대한 규칙(변수를 선언하는데 사이드 이펙트를 예방할 수 있는 각종 규칙들)이 제안되었다는 점은 단순히 개발 패러다임으로 바라볼 때와는 다르게 전체 프로그램 역사가 모두 이어지는 느낌을 받았습니다.

더 확장하여, 특정 언어에 국한되지 않고, 코드들이 어떻게 구성되면 좋은지 에 대해 저자의 시간의 흐름에 따른 경험을 바탕으로 얻은 원칙들을 배울 수 있었습니다.

아직 실무에 모두 적용하기엔 시간이 많이 걸리겠지만, 프로젝트에서 자주 보이던 xxxService, xxxServiceImpl 클래스의 의미가 이전에는 관습적으로 느껴지던 인터페이스가, 지금은 설계와 구현을 분리한 것이고, SRP를 준수하며, 좋은 아키텍처 로서 미래의 변경사항에 대비해 구성요소를 쉽게 분리할 수 있도록 준비해둔 아키텍처 요소로 보이게 되어서 시야가 넓어진 느낌을 받았습니다.

시간이 된다면 꼭 읽어보시는 걸 추천드립니다.

안녕하세요. 다메카솔🐿️ 입니다.

개발을 처음 시작할 때 추천받고 읽기 시작했지만 완독에 굉장히 오래 걸렸던 책 객체지향 사실과 오해 입니다.

 

https://product.kyobobook.co.kr/detail/S000001628109

 

객체지향의 사실과 오해 | 조영호 - 교보문고

객체지향의 사실과 오해 | 객체지향에 대한 선입견을 버려라!『객체지향의 사실과 오해』는 객체지향이란 무엇인가라는 원론적면서도 다소 위험한 질문에 답하기 위해 쓰여진 책이다. 안타깝

product.kyobobook.co.kr

 

독서기간 : 2023.05 ~ 2024.02

독서시간 : 10H +

평점 : ★★ ☆☆

한줄평 : 개발자 추천서에 꼭 들어가지만 읽기 쉽지 않은 책

 

객체지향 프로그램을 할 때 어떤 관점으로 프로그램을 바라보고 개발을 해야 더 생산성이 높을까?
자바를 처음 배울 때 클래스 생성부터 시작하여 메인함수 구현, 자동차나 붕어빵 클래스를 만들어서 객체들을 생성하고 값을 할당하는 등 기본 문법을 익혀나갑니다.


기능구현을 할 수 있게되고 프로그램을 작성하게 되면서 기능개발, 유지보수, 요구사항 변경 등 생산성에 대한 고민을 하게 되는데 이때 변화하는 요구사항에 유연하고 읽기 쉬운 코드, 견고한 프로그램을 작성할 수 있는 패러다임에 대해 앞서 나간 선배 개발자가 후배들에게 여러 예시로 설명을 해주는 내용이었습니다.


저는 보통 책을 읽을 때 출퇴근 시간에 읽는데, 내용이 추상적이고 예시가 많고 비슷하게 보이는 내용의 작은 차이들을 설명하는 글들이 많아 출퇴근때 읽기에는 가독성이 좋지 않아 완독에 많은 시간이 걸렸습다.
너무 자주 책을 덮는 일이 반복되어 왜이리 안읽히지 고민을 해보았는데 든 생각은 초보자가 읽기에는 다소 내용이 딱딱하게 느껴졌고, 어느정도 배경지식이 있어야 독서효율성이 나올 것 같습니다.


내용은 분명 알찬 책이지만, 읽기 쉬운 코드, 바보처럼 단순한 코드가 좋은 코드, 유지보수하기 쉬운 코드라 말하는 개발자의 관점으론 과연 독자에게 좋은 책인가? 라는 의문이 듭니다.
내공이 얕아서 그럴 수 있어 한 1~2년 뒤에 다시 한번 읽어볼 생각입니다.

안녕하세요. 다메카솔입니다. 🐿️

 

현재 회사에서 ISMS-P 인증을 준비하고 있습니다.

이를 위해서 데이터베이스에 저장되는 정보 중에 민감정보 암호화 작업이 어떻게 되는지 파악하고, 암호화 알고리즘이 얼마나 안전한지 점검하는 업무를 수행하였습니다.

 

이때 점검한 암호화 알고리즘의 종류에 따른 차이점에 대해 찾아보았습니다.

암호화에는 단방향 암호화와 양방향 암호화가 있는데, 이번 시간에는 단방향 암호화에 대해서만 살펴보도록 하겠습니다.

 

암호화 이미지 - 출처 KEYSIGHT

해시 알고리즘

해시 알고리즘은 고정된 크기의 고유한 값(해시 값 또는 해시 코드)을 생성하는 알고리즘입니다. 주어진 입력 데이터에 대해 항상 동일한 크기의 고정된 길이의 출력을 생성하며, 해시 함수라고도 불립니다. 해시 함수의 주요 특징은 다음과 같습니다:

  1. 고유성: 서로 다른 입력에 대해서는 고유한 해시 값을 생성합니다. 그러나 해시 함수의 출력 크기가 고정되어 있기 때문에 두 개 이상의 서로 다른 입력이 같은 해시 값을 갖을 수 있습니다. 이것을 '충돌'이라고 합니다.
  2. 고속성: 빠르게 계산될 수 있어야 합니다.
  3. 역전 불가능성: 해시 값으로는 원래 데이터를 역산하기 어렵습니다. 즉, 해시 값으로는 원래 데이터를 복원할 수 없어야 합니다.
  4. 비슷한 입력에 대한 다양한 출력: 입력의 작은 변화에 대해 큰 차이를 가져와야 합니다.

해시 알고리즘은 주로 데이터의 무결성을 검증하거나, 암호화된 비밀번호를 저장할 때 사용됩니다. 대표적인 해시 알고리즘에는 MD5, SHA-1, SHA-256, SHA-3 등이 있습니다.

 

우리에게 가장 중요한 것은 SHA 알고리즘입니다.

SHA (Secure Hashing Algorithm)는 암호화 보안에 사용됩니다. 이 알고리즘의 가장 중요한 전제는 해시의 비가역성과 고유성입니다. 비가역성-원본 데이터는 안전하고 알려지지 않은 상태로 유지됩니다. 고유성-두 개의 다른 데이터가 동일한 키를 생성 할 수 없습니다.

단방향 암호화 (One-way Encryption 또는 Hashing):

  • 특징:
    • 입력 데이터를 암호화한 결과를 역으로 해독할 수 없습니다.
    • 주로 암호화된 값을 저장하거나 전송할 때 사용됩니다.
    • 대표적으로 해시 함수 (예: SHA-256, MD5)가 사용됩니다.
    • 동일한 입력에 대해서는 항상 동일한 해시 값이 생성됩니다.
    • 주로 암호화된 비밀번호를 저장하고, 데이터 무결성을 검증하는 데 사용됩니다.
  • 예시:
    • 웹 사이트에서 사용자의 비밀번호를 해시하여 저장하고, 로그인 시에 입력된 비밀번호를 해시하여 저장된 해시 값과 비교합니다.

SHA-1 (Secure Hash Algorithm 1)

  • 길이: 160 비트
  • 출시 년도: 1993년
  • 특징: SHA-1은 빠른 속도와 간단한 구조를 가지고 있습니다. 그러나 현재는 충돌에 취약한 것으로 알려져 있어 보안 측면에서는 사용을 권장하지 않습니다. 실제로 SHA-1은 많은 곳에서 보안 요구 사항을 충족하지 못하게 되었고, 대부분의 보안 전문가들은 SHA-1을 피하고 SHA-2나 SHA-3으로 전환할 것을 권장합니다.

SHA-2 (Secure Hash Algorithm 2)

  • 길이: 다양한 길이를 가지고 있으며, 주로 224, 256, 384, 512 비트가 사용됩니다.
  • 출시 년도: 2001년
  • 특징: SHA-2는 SHA-1의 취약성을 보완하기 위해 개발되었습니다. 다양한 해시 길이를 지원하며, 길이가 길어질수록 더 강력한 보안을 제공합니다. 현재까지 안전하게 사용될 수 있는 해시 알고리즘 중 하나로 간주되고 있습니다.

SHA-256

  • 길이: 160 비트
  • 출시 년도: 1993년
  • 특징: SHA-1은 빠른 속도와 간단한 구조를 가지고 있습니다. 그러나 현재는 충돌에 취약한 것으로 알려져 있어 보안 측면에서는 사용을 권장하지 않습니다. 실제로 SHA-1은 많은 곳에서 보안 요구 사항을 충족하지 못하게 되었고, 대부분의 보안 전문가들은 SHA-1을 피하고 SHA-2나 SHA-3으로 전환할 것을 권장합니다.

비교 요약

  • 보안 수준: SHA-1 < SHA-256 < SHA-2 (다양한 길이)
  • 사용 권장 여부: SHA-1 (피하길 권장), SHA-256 및 SHA-2 (현재까지 안전한 보안 수준을 제공하므로 사용 가능)

결론

암호화 알고리즘은 SHA-2 이상을 사용하기를 권장하고 있습니다.

참고자료

NIST FIPS PUB 180-4

 

FIPS 180-4, Secure Hash Standard (SHS) | CSRC

Publications Secure Hash Standard (SHS)     Documentation     Topics Date Published: August 2015 Supersedes: FIPS 180-4 (03/06/2012) Planning Note (03/07/2023): After two rounds of public comment, NIST has decided to revise FIPS 180-4. Author(s) Nati

csrc.nist.gov

https://ko.wikipedia.org/wiki/SHA

 

SHA - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. SHA(Secure Hash Algorithm, 안전한 해시 알고리즘) 함수들은 서로 관련된 암호학적 해시 함수들의 모음이다. 이들 함수는 미국 국가안보국(NSA)이 1993년에 처음으로 설

ko.wikipedia.org

https://ko.wikipedia.org/wiki/SHA-2

 

SHA-2 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. SHA-2 (Secure Hash Algorithm 2)는 미국 국가안보국(NSA)이 설계한 암호화 해시 함수들의 집합이다.[1] 암호 해시 함수는 디지털 데이터 상에서 수학적으로 동작하며 알

ko.wikipedia.org

 

문의 사항이나 도움이 필요하신 분은 댓글 달아주세요!

안녕하세요. 다메카솔입니다. 🐿️

개발중에 발생한 에러를 예방하기위해 원인과 해결방법을 정리해보았습니다.

발생 배경

API에 Request를 보낼때, 서버에서 다음과 같은 에러가 발생하였습니다.

오류 메시지

Cannot construct instance of `class` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator))

원인

위 에러는  주로 Jackson 또는 다른 JSON 라이브러리를 사용하여 JSON 데이터를 해당 클래스의 객체로 변환하는 중에 발생합니다. 이러한 라이브러리들은 클래스를 직렬화하거나 역직렬화할 때 기본 생성자 (default constructor) 또는 특정 생성자를 사용하는데, 클래스에 기본 생성자가 없거나 또는 라이브러리가 사용할 수 있는 생성자가 없을 때 발생합니다.

블록을 조립한 레고 이미지

 

직렬화와 역직렬화에 대해 더 궁금하시다면 아래 글도 함께 읽기 좋습니다.

https://damecasol.tistory.com/33

 

[Java]Serializable 직렬화

가끔 인터페이스를 보다보면 Serializable 이란 인터페이스를 상속한 클래스를 볼 수 있었다. 검색해봤을땐 직렬화를 가능하게 해주는 인터페이스고, 그렇게 하여 파일이나과 인터넷으로 객체를

damecasol.tistory.com

 

해결방법

  • 기본생성자 추가

클래스에 기본 생성자를 추가합니다.. 기본 생성자란 매개변수를 가지지 않는 생성자입니다.

public class YourClass {
    public YourClass() {
        // 기본 생성자 내용
    }
}
  • 매개변수가 있는 생성자의 존재

클래스에 매개변수가 있는 생성자가 있는 경우, 해당 생성자도 정의되어 있는지 확인합니다. 만약 라이브러리가 특정 생성자를 필요로 하는데 그 생성자가 없다면 이 오류가 발생할 수 있습니다.

public class YourClass {
    public YourClass(String param1, int param2) {
        // 매개변수가 있는 생성자 내용
    }
}
  • @JsonCreator 어노테이션 사용

만약 여러 생성자가 있는 경우, Jackson 라이브러리에서 사용할 생성자를 명시하기 위해 @JsonCreator 어노테이션을 사용할 수 있습니다.

public class YourClass {
    private String param1;
    private int param2;

    @JsonCreator
    public YourClass(@JsonProperty("param1") String param1, @JsonProperty("param2") int param2) {
        this.param1 = param1;
        this.param2 = param2;
    }
}

참조

https://fasterxml.github.io/jackson-databind/javadoc/2.13/com/fasterxml/jackson/databind/ObjectMapper.html

 

ObjectMapper (jackson-databind 2.13.0 API)

Convenience method for doing two-step conversion from given value, into instance of given value type, by writing value into temporary buffer and reading from the buffer into specified target type. This method is functionally similar to first serializing gi

fasterxml.github.io

 

문의 사항이나 도움이 필요하신 분은 댓글 달아주세요!

'IT > JAVA' 카테고리의 다른 글

[Mybatis] CDATA 란?  (0) 2023.03.15
[Java]Serializable 직렬화  (0) 2022.06.12

+ Recent posts