오늘 어제 학습한 DDD를 복습을 했다.DDD에는 중요한 개념이 2개가 나오는데다음과 같다.바운디드 컨텍스트: 컨텍스트의 경계를 나눈다?이름에서 부터 알수 있듯이 경계를 나눈것이다. 보통 컨텍스트는 문맥이라고 한다.그렇다면 DDD가 말하는 문맥이란 무엇일까에 대해 고민을 해보았다.어떤걸 경계로 나눈것이 좋을까?그래서 생각한것이 도메인이다. 도메인에 대한 영토, 분야, 영역, 범위를 뜻하는 단어라 한다고 한다.결국 바운디드 컨텍스트는 도메인별로 나눈것을 말한다는 것을 알 수 있다.그러면 어그리게이트는 어떤걸까?얘가 어떤 뜻을 내포하는지는 정확히 모르겠으나 내가 생각할때는 트랜잭션의 범위로 나눈것을 말하는 것같다.튜터님께 크로스 체크를 해서 내가 이해한게 맞는지 확인해보니 맞다고 하셨다.결국 바운디드 컨텍스..
오늘 특강으로 DDD를 학습하였다.많은 내용을 배웠지만 아직 정리가 덜된거 같다.강의에서 모놀로식에서 DDD로 전향하는 이유에 대해 다음과 같다고 하셨다.모놀리식을 MSA로 전환하고 싶은욕구ERD 설계 이외의 다른 설계 방식이 있지 않을까?아직은 정확하게 이해하기는 어렵지만바운디드 컨텍스트와 에그리거트 루트에 대한 용어를 학습하였다.바운디드 컨텍스트는 비즈니스 적으로 해결이 된다고 하셨구에그리거트 루트 같은 경우는 논리적인 단위로 묶어주는거라고 하셨다.아직 공부전이라 DDD를 이해하기는 어렵지만 조금씩 학습하면 되지 않을까 싶다.
첫 번째 프로젝트가 종료되었다.프로젝트에 힘을 많이 쓰지 않았음에도 생각보다 배운게 많은 시간이었던거 같다.짧지만 짧은 시간이었지만 그 시간동안 팀장으로써 최선을 다했다.초반에 스터디를 한다고 프로젝트를 냉팽겨치고 나왔던게 아직도 생각이 난다.스터디가 종료후에 erd나 api명세서를 확인했고 생각보다 잘 되어있어서 놀랬다.하지만 내가 팀장인데 이런식으로 빠지는건 좀 아니라는 생각을 했고 스터디원들에게 말해서 스터디를 종료하게 되었다.이 선택이 잘한선택인지는 잘모르겠지만 적어도 팀에 방해가 되고 싶지 않았다.그래서 팀원들이 질문을 하면 항상 내가 대답을 해주곤 한거 같다.근데 이 프로젝트가 많이 아쉬운거 같다.요구사항에 맞게 개발한건 좋은데 프로젝트를 한계를 둬서 개발을 한게 아닌가 하는 생각이 문득들었다..
git에 application.yml을 올리려고 하니 문제가 발생하였다.그건 바로 application.yml에 민감한 내용의 정보를 올렸다는 점이다.원래 같으면 ${}로 감싸서 환경변수로 사용했을텐데 그러지 않았다.요런식으로 사용하게 되면 환경변수를 세팅할 수 있다. 근데 배포는 jar파일로 말아서 배포가 되어진다.그니까 저렇게 사용할거면 jar파일로 말때 강제로 넣어줘야 한다는 뜻이다.근데 나는 java -jar xxx.java이렇게 사용하고 싶었다. 그러니까 jar파일을 실행시킬때 환경변수를 세팅하고 싶지 않았다.그래서 방법을 찾아보니.env파일을 만들라고 했다.찾아보니 루트에 만들라고 했다.그리고 env파일에 저 위내용을 집어넣고 돌려봤다.후..db가 자꾸안된다고 했다. 몇번의 시도를 해봤지만 결..
팀원중 한분이 레디스를 사용해야 된다고 하셨다.프로젝트가 한참지난 후였는데 이런 요청을 하신거 보니 가능할까 의심이 들어 여쭤보았다.어제 팀원들과 테스트를 마치고 다시 물어봤을때 일정상 문제가 없다고 하셨다.그래서 레디스를 넣기로 했다.이제 aws를 이용해서 레디스를 사용하기 위해 어떻게 하면 좋을지 고민해봤다.찾아보니 레디스는 aws자체에서 제공받을 수 있지만 ec2내에서 설치할 수 있다고 했다.생각해보니 ec2가 컴퓨터인데 설치가 안되는게 이상하긴했다.아무튼 ec2에 레디스를 설치하고 로컬로 레디스에 접근을 해보았다.되지 않았다.확인을 해보니 아웃바운드를 내가 설정하지 않아서 발생했던게 그 이유였다.암튼 이렇게 설정하고 다시 실행해봤는데 역시나 되지 않았다.무슨 문제인지 찾아보니ec2내에서 레디스를 ..
AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)의 탄생 배경은 OOP(Object-Oriented Programming)의 한계를 보완하기 위한 필요성에서 출발했습니다.OOP는 객체 단위로 코드의 모듈화와 재사용성을 높였지만, 프로그램의 다양한 부분에서 공통적으로 필요하지만 특정 객체에 속하지 않는 기능을 처리하는 데 한계를 보였습니다.이러한 공통적인 기능을 "횡단 관심사(Cross-Cutting Concerns)"라고 합니다. 대표적인 예로는 로그 처리, 트랜잭션 관리, 보안, 예외 처리, 성능 모니터링 같은 것들이 있습니다. 이런 기능들은 여러 클래스와 메서드에서 반복적으로 등장하며, 중복 코드와 유지보수의 어려움을 초래합니다.AOP는 바로 이 횡단 관심사를 핵심 비..
개발 진척도는 다 된거 같아테스트를 하기위해 rds를 aws로 띄웠다. 하지만 이상하게도 잘 되지 않았다.확인해보니 내가 보안그룹을 설정하지 않았던것이 그 이유였다.암튼 그것을 설정을 마무리하고 RDS를 띄운후 테스트를 진행하였다.테스트 해보니 버그가 생각보다 많이 나왔다.테스트해보길 잘 했다라는 생각이 들었고어떤걸 수정할지 체크해봤다.그러다 고민이 생겼다.내가 주문파트인데 요런 시나리오를 생각해봤다.가게가 오픈되었기 때문에 주문을 했는데배달 도중에 가게가 문을 닫았다면...이때 배달은 완료가 되어야 하나??라는것이 고민이었다. 이걸 논의해보고 멘토님께 여쭤보니까 고건 가게 탓으로 돌려도 된다고 하셨다.생각해보니 그런거 같다.이 구현에 저런거 까지 신경쓸 필요는 없을거 같다는 생각이 들었다.이제 슬슬 전..
음... 공부할 시간은 없고 프로젝트는 진행하는데그래도 조금씩 프로젝트가 조금씩 완료가 되는거 같아 다행이다.내가 백준으로 문제를 풀고 있었는데https://www.acmicpc.net/problem/3273요 문제를 풀었다. 처음에 이 문제를 어떻게 접근할수 있을지 고민해봤다.처음에는 답이 안오다가 빼기를 이용하면 되지 않을까 라는 생각을했다.그래서 아무생각없이 arrayList로 데이터를 저장하고 2로 나눴기때문에 정렬을 진행해줬다.처음 코드는import java.util.*;public class Main { public static void main(String[] args) { List arr = new ArrayList(); Scanner sc = new Scan..
이제 프로젝트의 막바지다.뭔가 처음 구상대로 흘러가지 않는 느낌이다.잘하고 있는지도 모르겠구...잘되고 있는지도 모르겠다.개발은 기능개발은 다 된거 같은데..내가 맡은 곳이 주문/결제 쪽이라 테스트하기가 쉽지가 않다.아무래도 엔드포인트가 되기때문인가?테스트만 잘 진행하면 무리 없을거 같은디...이거이거 잘되고 있는지 잘모르겠네..
오늘 플로우 정리를 하고 멘토님께 질문을 하였다.대충 플로우는 위와 같다.저 플로우가 맞다고 하셨고 나는 저렇게 개발을 완료하고 admin즉 마스터쪽 개발하기 위해 확인하였다. 근데 admin쪽이랑 일반이랑 같은 API가 있어서이 부분은 어떻게 하면 좋을지 여쭤보았다.멘토님께 여쭤보니 어드민쪽도 필요는 하다고 하셨고 그렇게 진행하기로 했다.멘토님이 말씀하시길 분리하는것이 맞다고 하셨고 권한 부여를 할때 많이 까다롭다고 하셨다.나는 동의했고 내일 수정 예정이다.원래 오늘까지 진행예정이었는데 오늘은 멘토링 준비하러 간다. 총총총공부한거 없을때 요런거 싸지르기..
메모리 절약을 위해, 인스턴스가 필요할 때 똑같은 인스턴스를 새로 만들지 않고 기존의 인스턴스를 가져와 활용하는 기법리소스를 많이 차지하는 역할을 하는 무거운 클래스일때 적합장점클래스가 하나의 인스턴트만 갖는다는 것을 확신할 수 있습니다.여러 개의 인스턴스를 생성할 필요가 없으므로 메모리 낭비를 방지함이 인스턴스에 대한 전역 접근 지점을 얻습니다.새로운 객체를 계속 만들 필요 없이 하나의 인스턴스를 공유하므로 메모리 사용량을 줄일 수 있음싱글턴 객체는 처음 요청될 때만 초기화됩니다. 필요할 때만 객체가 생성되므로, 불필요한 메모리 사용을 방지단점단일 책임 원칙을 위반합니다. 이 패턴은 한 번에 두 가지의 문제를 동시에 해결합니다.객체 관리와 로직 처리를 동시에 하기 때문에이 패턴은 다중 스레드 환경에서 ..
gpt로 엔티티를 만들었더니@Id@GeneratedValue(generator = "UUID")@GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator")@Column(columnDefinition = "UUID", updatable = false, nullable = false)private UUID id;요렇게 만들어줬다. 그리고 나서 정상적으로 테이블이 생성된걸 확인하고커밋을 하려고 했다.. 그런데!!!경고문이 발생해서 혹시나 해서 확인해보니더 이상 UUID는 위 방식처럼 만들 수 없었다.그래서 인터넷을 찾아보니https://stackoverflow.com/questions/76723290/using-the-new-typ..
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.