종강하고 작성하러 온 마지막 글... 아래는 이전에 작성한 EC2, CodeDeploy, S3 생성 및 세팅 글입니다. (1) EC2 인스턴스 생성 및 세팅(2) CodeDeploy 및 S3 세팅 GithubActions 연동에 들어가기 전 준비물!!!!!첫 번째 글에서 발급받은 사용자 액세스 키와 시크릿 키프로젝트 데이터베이스 스키마의 권한을 얻은 계정의 아이디와 비밀번호AWS S3 버킷 이름AWS CodeDeploy 애플리케이션 이름AWS CodeDeploy 애플리케이션 그룹 이름AWS EC2 인스턴스 이름위에 있는 것들을 미리 준비해 두면 스크립트를 작성할 때 수월합니다. 1. 프로젝트에 deploy.yml 파일 생성우선 프로젝트 최상단에 .github 폴더를 만들고 그 안에 workflo..
vmware 가상 서버에 공격자와 피공격자 서버, 그리고 에이전트 서버를 올려 공격을 테스트했다. 공격에 대응하는 내용도 담겨있다.처음에는 졸업 프로젝트 서버에다가 해볼까 했지만 곧 데모 발표라 불안해서 하지 않았다. 하지만 이제 대응 방법을 숙지했으니 기회만 되면 내가 운영하고 있는 서버를 공격해보고 싶다. 수행한 공격Smurf 공격Sloworis 공격 (Slow HTTP Header DoS)RUDY 공격 (Slow HTTP POST DoS)
@Entity@NoArgsConstructor(access = AccessLevel.PROTECTED)public class Study { // ... @OneToMany( mappedBy = "study", cascade = {CascadeType.PERSIST, CascadeType.REMOVE}, orphanRemoval = true ) private List images = new ArrayList(); // ... }위처럼 Study 엔티티에 선언되어 있었는데, List를 Images로 묶고 싶어졌다. 이때 Images는 List를 갖는 일급 컬렉션이다. 근데 엔티티 안에 일급 컬렉션을 넣는 경우는 처음이라 어떻게 해야 할지..
컨트롤러 응답을 이렇게 구현했다가 403 Forbidden이 발생해서 5시간 동안 삽질했다.더 부끄러운 건 로그를 제대로 안 봐서 이 사단이 만들어졌다는 거다.. 2024-05-23T01:55:58.686+09:00 WARN 60868 --- [nio-8080-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: No acceptable representation]HttpMediaTypeNotAcceptableException라고 명시되어 있는데 응답이 403 Forbidden라 권한 문제로 착각 + WARN 경고여서 그냥 넘겼다... 이렇게..
한 명의 Member가 Account라는 객체를 가지도록 구현했는데 값 객체와 엔티티의 개념이 모호하여 정리하게 되었다. 아래는 기존 코드이다. 1️⃣ Member Entitypublic class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Valid @Embedded private Account account; @NotBlank private String nickname; private Role role; @Builder public Member(Account account, String nickname, Role role) { ..
닉네임 뒤에 난수 식별자 붙이는 기능을 구현하면서 늘 사용하던 Random 객체를 사용했다. 근데 어느 친절한 개발자 분께서 "Random 클래스"의 문제점이 뭐냐고 물어보셨다.네? Random class에 문제점이 있었나요? 바로 어떤 문제점이 있는지 찾아봤다. 1. 보안 Random 객체를 사용할 경우 생각보다 난수 같지 않은 난수를 얻는다(특징이 반복되는 난수들이 생성된다). 그래서 SecureRandom 객체를 사용해서 더 난수에 가까운 값을 만들 수 있다. 비교적 난수를 예측하기 쉬운 Random보다 SecureRandom 객체를 사용하는 것이 좋다. 라고 하면 좋겠지만 SecureRandom 객체 역시 사용하지 않는 게 좋다. 보안 목적을 떠나서 SecureRandom 객체 역시 Ra..
특정한 관심사에 따라 기능을 나누고, 각 기능을 독립적으로 개발한 뒤 이를 조합하는 방식으로 복잡한 소프트웨어를 구성해 보자는 아이디어를 관심사의 분리(Separation of concerns, SoC)라고 한다. 관심사를 분리하여 코드를 작성하게 되면, 독립된 특정 기능에 집중할 수 있기 때문에 코드를 파악하는데 수월하며 특정 기능을 변경하거나 추가할 때도 그 부분만 교체하면 되기 때문에 훨씬 간단하게 문제를 해결할 수 있다. 정리모듈이 하나의 목적만 가지도록 만들기 위함이다. 다양한 기능을 가지지 않고 하나의 기능만 가짐으로써 수정될 이유도 한 가지만 가진다. 하드웨어보다 유연하게 수정할 수 있는 소프트웨어는 변화에 유연하게 대응해야 한다. 그러나 모듈마다 여러 기능을 가지고 있으면 수정의 복잡도가..
종종 무시되는 작은 객체들을 '값 객체'로 구현하면 풍부한 행동을 얻을 수 있다.- 마틴 파울러 값 객체란?객체지향 프로그래밍에서는 다양한 것들을 객체로 만들 수 있다. 객체로 만들 수 있는 것 중에 어떤 "값"도 포함된다. (ex. 잔고, 색상, 좌표 등) 자바가 제공하는 원시 데이터 타입을 사용해 개발할 수 있지만, 시스템 특유의 값을 정의해야 할 때가 분명 존재한다. 이때 정의하는 것이 값 객체이다.값 객체의 특징불변성교환등가성 1. 불변성값 객체의 상태를 수정할 때는 새로운 값을 대입한다. 이때 변하는 것은 값의 상태지, 값 자체가 수정되는 것은 아니다.예를 들어 Member 객체의 name의 상태가 Jiyoon에서 Yoonji로 바뀌었다. 이때 바뀐 것은 name이지, Member 자체가 아니..