전체 글

    [Spring Boot] Rest API 구현 (Feat. spring date rest)

    💡 Rest API 란? 참고 : https://withseungryu.tistory.com/100 💡 Spring data rest 란? spring-data-rest, a recent addition to the spring-dataproject, is a framework that helps you expose your entities directly as RESTful webservice endpoints. Unlike rails, grails or roo it does not generate any code achieving this goal. spring data-rest supports JPA, MongoDB, JSR-303 validation, HAL and many more. It is ..

    Rest API?

    Spring Boot - What is Rest API? 💡 Rest란? ​ 웹과 같은 분산 하이퍼미디어 시스템에서 사용하는 통신 네트워크 아키텍처 HTTP와 URI의 단순하고 간결한 장점을 계승한 Network 아키텍쳐 참고 : https://meetup.toast.com/posts/92 💡 Rest가 만들어진 목적 구성요소 상호작용의 규모 확장성 인터페이스의 범용성 구성요소의 독립적인 배포 중간적 구성요소를 이용한 응답 지연 감소, 보안 강화, 레거시 시스템 인캡슐레이션 Rest API 설계하기 자원 : URI 행위 : HTTP 메소드 표현 : 리소스에 대한 표현 (HTTP Message Body) 💡 URI 설계 URI는 URL을 포함한 개념 URL : 웹상의 파일 위치를 표현 -> http://l..

    [Spring Boot] YAML 파일 매핑하기 (Feat. @ConfigurationProperties)

    💡 YAML 파일이란? 위키 참조 더보기 YAML은 XML, C, 파이썬, 펄, RFC2822에서 정의된 e-mail 양식에서 개념을 얻어 만들어진 '사람이 쉽게 읽을 수 있는' 데이터 직렬화 양식이다. 2001년에 클라크 에반스가 고안했고, Ingy dot Net 및 Oren Ben-Kiki와 함께 디자인했다. YAML이라는 이름은 "YAML은 마크업 언어가 아니다 (YAML Ain't Markup Language)” 라는 재귀적인 이름에서 유래되었다. 원래 YAML의 뜻은 “또 다른 마크업 언어 (Yet Another Markup Language)”였으나, YAML의 핵심은 문서 마크업이 아닌 데이터 중심에 있다는 것을 보여주기 위해 이름을 바꾸었다. 오늘날 XML과 JSON이 데이터 직렬화에 주로 ..

    [Spring] 트랜잭션 문제 해결 - 트랜잭션 동기화 기법

    🧐 트랜잭션 동기화 기법이란? 트랜잭션을 시작하기 위해 만든 Connection 오브젝트를 특별한 저장소에 보관하면서, 호출되는 DAO의 메소드에서 앞서 저장된 Connection을 가져다 사용하는 기법. 즉, 하나의 트랜잭션을 동기화 방식을 통해 이 사이에 실행된 메소드들은 동기화된 트랜잭션을 사용하게 하는 기법. UserService의 트랜잭션 원자성 문제를 해결하기 위해 트랜잭션 동기화 기법을 사용해 해결해보자 스프링은 트랜잭션 동기화 관리 클래스인 TransactionSynchronizationManager를 제공해준다. 따라서 위 클래스의 메소드들을 통해 동기화를 해보자. TransactionSynchronizationManager 메소드들 👉 initSynchronization : 트랜잭션 동..

    [Spring] 트랜잭션 문제 찾기 (feat. 트랜잭션 경계설정 구조)

    🧐 레벨 업그레이드 기능을 구현했을 때, 업그레이드 변경 과정 중에 에러가 발생한다면? 에러가 나기 전까지 유저들은 업그레이드가 될까? 한번 일부로 업그레이드 과정 중에 에러를 발생시켜 강제적인 상황을 만들어 확인해보자! @Test public void upgradeAllOrNothing() { UserService testUserService = new TestUserService(users.get(3).getId()); testUserService.setUserDao(this.userDao); userDao.deleteAll(); for(User user : users) userDao.add(user); try { testUserService.upgradeLevels(0); fail("TestUser..

    [Spring] 리팩토링 해보기 (feat. 객체지향적인 관점)

    💡 리팩토링이란? 리팩터링(refactoring)은 소프트웨어 공학에서 '결과의 변경 없이 코드의 구조를 재조정함'을 뜻한다. 주로 가독성을 높이고 유지보수를 편하게 한다. 버그를 없애거나 새로운 기능을 추가하는 행위는 아니다. 사용자가 보는 외부 화면은 그대로 두면서 내부 논리나 구조를 바꾸고 개선하는 유지보수 행위이다. ✏️ 리팩토링 전 코드 점검 항목 코드에 중복된 부분은 없는가? 코드가 무엇을 하는 것인지 이해하기 불편하지 않은가? 코드가 자신이 있어야 할 자리에 있는가? 앞으로 변경이 일어난다면 어떤 것이 있을 수 있고, 그 변화에 쉽게 대응할 수 있게 작성되어 있는가? ✏️ UserService를 리팩토링 해보자 각 User마다 갖고 있는 level을 login, recommend를 검사해 기..