본문 바로가기

개발35

Docker - 서버관리의 역사 개발자가 개발을 잘하는 것은 당연히 중요하다. 하지만 SW마에스트로에서 여러 멘토님들께 멘토링을 들으면서, 개발을 잘하는 것도 중요하지만, 자신이 개발하고자 하는 애플리케이션의 목적과 요구사항에 맞춰서 적합한 기술을 선택하는 것에 대한 중요성을 많이 느낄 수 있었다. 이는 애플리케이션의 성능, 안정성, 보안성 등 비기능적인 요소를 디벨롭할 수 있도록 도와준다. 소프트웨어 마에스트로에서 진행하는 프로젝트에서 기능 개발에만 몰두하지 않고, 개발하기 전에 여러 가지 많은 고민과 설계를 바탕으로 개발을 하여, 소프트웨어 품질을 높이기 위해 많은 도전을 할 예정이다. 서론이 길었지만, 최근 Docker 멘토링에서 서버관리의 역사에 대해서 배웠다. 기술의 역사를 공부하는 과정에서 해당 기술이 왜 등장했는지에 대해서.. 2023. 5. 11.
[Java] 일급 컬렉션 소프트웨어 마에스트로 14기에 합격된 이후에 가장 먼저 하게 된 것은 백엔드 스터디에 참여한 것이었다.본격적인 스터디를 하기전에 스터디원들과 함께 우테코 프리코스를 진행하고 코드리뷰를 진행하였다. 그 과정을 통해 일급 컬렉션이라는 것을 알게되었다.생소한 용어였고, 처음 접해보았지만 일급 컬렉션을 사용하면 할수록 일급 컬렉션을 사용함으로써 얻을 수 있는 장점들에 대해서 느낄 수 있었다. 따라서, 해당 포스팅을 통해 일급 컬렉션에 대해서 정리하려고 한다. 먼저, 일급 컬렉션이란 Java Collection을 Wrapping 하면서, 그 외 다른 멤버 변수가 없는 상태를 말한다. List numbers = new ArrayList(); 위의 코드를 아래와 같이 Wrapping 하는 것이다. public cla.. 2023. 5. 7.
[Spring] 간편 결제 기능 팩토리 클래스 적용하기 간편 결제 기능이 있는 프로젝트를 진행하다가, 기존에는 현금결제와 카카오페이결제 기능이 있었다. 이번에 네이버페이결제 기능을 추가하기 위해서, 코드를 작성하면 새로운 기능 추가로 인해서 기존의 코드들이 대폭 수정하는 일이 발생하였다. OCP 법칙에 맞지 않게 코드를 설계했었다. 코드를 설계할 때부터, 기능이 추가될 것을 예상하고 설계를 했으면 좋았을 텐데.. 아무튼 새로운 결제 기능을 추가함에 있어서, 기존의 코드가 수정되지 않도록 팩토리 패턴을 적용하였다. 팩토리 패턴을 적용하기 위해서 아래와 같이 PayService 인터페이스와 각각 구현체를 구현하였다. public interface PayService { String pay(Long orderId); } @Service public class Ka.. 2023. 5. 2.
[Spring] 동일한 클래스 내에서 내부 메서드 호출시 @Transactional 적용 안되는 이슈 프로젝트를 개발하던 도중 다음과 같은 이슈가 발생했다. 이슈 아래 코드는 낙관적 락을 이용하여, 메뉴 재고에 대한 동시성 문제를 해결하기 위한 코드이다. 낙관적 락에서 락 획득이 실패한 경우에는 개발자가 실패에 대한 처리를 직접 구현해주어야 하기 때문에, 다음과 같이 무한 루프를 통해서 일정시간 대기하고 다시 락 획득을 할 수 있도록 구현하였다. * 실제 매번 무한 루프를 돌며 락을 재획득하는 방법은 성능적인 측면에서 비효율적일 수 있다. 하지만 예시를 쉽게 작성하기 위해서 다음과 같이 작성하였습니다. ✍🏻 중요한 것은 낙관적 락(@Lock(value = LockModeType.OPTIMISTIC))을 사용하는 decrease 메서드는 반드시 트랜잭션 내에서 실행해야 한다는 점이다. @Service pu.. 2023. 4. 2.
[Spring] OSIV 에 대해서 Spring으로 웹 애플리케이션을 실행하였을 때, 특별한 설정을 해주지 않으면 아래와 같은 경고가 출력되는 것을 확인할 수 있다. 이번 포스팅을 통해 해당 경고는 왜 출력되는 것이고, spring.jpa.open-in-view가 무엇인지에 대해서 정리하려고 한다. 2023-03-24 20:52:47.034 WARN 63885 --- [ restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open.. 2023. 3. 24.