
배경우테코에서 미션을 진행하며 테이블 초기화를 위해 schema.sql 파일을 이용하게 되었고, 그 과정에서 스프링을 시작하면 어떻게 schema.sql 파일을 실행시키는지 궁금해져 디버깅을 통해 알아보고자 이 글을 작성하게 되었다.학습 내용@Configuration( proxyBeanMethods = false)@ConditionalOnMissingBean({SqlDataSourceScriptDatabaseInitializer.class, SqlR2dbcScriptDatabaseInitializer.class})@ConditionalOnSingleCandidate(DataSource.class)@ConditionalOnClass({DatabasePopulator.class})class DataSo..

들어가며 상속이란, 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 상속을 이용하면 부모 클래스가 가지고 있는 멤버변수와 메서드를 사용할 수 있어 코드 재사용을 할때 효과적이라고 한다. 그렇다면 상속은 언제 사용하는것이 좋을까? 상속을 사용하는 이유 상속을 왜 사용할까? 상속은 두가지 용도로 사용된다. 첫번째는 타입 계층을 구현하는 것이고 두번째는 코드 재사용이다. 객체지향 프로그래밍에서 타입 계층을 구현한다는 의미는 무엇일까? 객체지향 프로그래밍에서 타입을 정의하는 것은 객체의 퍼블릭 인터페이스를 정의하는 것과 동일하다. 즉, 객체의 퍼블릭 인터페이스가 객체의 타입을 결정한다. 따라서 동일한 퍼블릭 인터페이스를 제공하는 객체들은 동일한 타입으로 분류된다. 여기서 중요한 사실은 객체의 타입..

개발의 시작 개발의 본격적인 시작은 군대 입대 3개월전이었다. 입대전 할것도 마땅치 않아 무언가라도 해보고 싶었던 나는 우연히 프론트 개발에 대해 알게되었다. 예전에 형이 학교에서 만들어온 사이트를 내게 보여준 적이 있었는데, 정말 신기하기도 했고 어떻게 저걸 만들 수 있을지 궁금했다. 컴공 1학년을 마쳤지만, 전공수업때 배운건 C언어, 파이썬 뿐이라 그런건 도대체 어떻게 만드는지 궁금했다. 그래서 처음에 웹사이트를 한번 만들어 보자고 다짐했다. 처음에는 생활코딩의 web강의를 들으며 html, css, js가 무엇인지 알게되었고 조금이나마 무언가를 내 손으로 직접 만들 수 있었다. 단지 컴퓨터밖에 없는데 무언가가 내뜻대로 만들어지고 바로 눈에 보이니 그때부터 개발에 대한 매력에 빠진 것 같다. 그렇게..

지원 동기주변에 개발 관련 관심사를 가진 친구가 적었던 나는 프로젝트를 할때면 수많은 고민이 생기곤 했다. 어떤 날에는 1시간동안 생각하느라 코드 한줄도 작성하지 못한적도 있다.. 주로 '어떻게 하면 더 유지보수하기 좋은 코드를 작성할 수 있을까?' 같은 질문에 대한 고민인데, 얕은 지식을 가진채로 고민만 하다보니 결론을 못짓고 끝나는 경우가 허다했다. 그럴때면 나는 우아한테크코스 깃허브를 탐방하곤한다. 깃허브에서 여러가지 프로젝트 코드를 보곤하는데 그중 우아한테크코스의 크루분들이 작성하는 코드가 내눈에는 제일 깔끔해보였다. 우테코 크루분들이 진행하는 프로젝트 코드를 보며 '어? 저런 방식이 있었네?', '이럴땐 이렇게 하는구나' 와 같이 많은 깨달음을 얻었고 그걸 바탕으로 내 프로젝트에도 적용하곤 했다..

스프링에서 이벤트는 강하게 결합된 의존성을 느슨하게 만들어주는 역할을 할 수 있다. 예를들어 주문 시스템에서 주문이 완료되면 주문 알림을 준다던가 주문 수량을 증가시키는 일을 하게될때 주문 시스템은 후속작업을 위한 여러 서비스들을 의존하게 된다. 이때 스프링 이벤트를 사용하면 이러한 의존성을 느슨하게 만들어 줄 수 있다. 1. 스프링에서 이벤트 사용법이벤트를 발행하기 위해서는 ApplicationEventPublisher를 주입받으면 된다. ApplicationEventPublisher을 주입받기 위해서는 첫번째로 ApplicationEventPublisherAware 인터페이스를 구현한 class를 빈으로 등록해주면 된다.@Servicepublic class EventService implements..

배경현재 프로젝트로 개발중인 snappy라는 서비스에서는 여러 사용자가 촬영한 사진을 다음과 같이 보여주게된다. 현재 각각의 사진들은 사용자가 촬영한 원본 사진 그대로 홈화면에서 사용중이다. 서비스의 특성상 사진을 확인하는 사용자가 많을텐데 이렇게 원본 사진을 그대로 사용자에게 보여주는 것은 네트워크 지연뿐만아니라 네트워크 트래픽도 많아져 aws에 지불해야할 요금이 서비스가 커지면 커질수록 높아질 것이다. 또한 사진뿐만아니라 모임의 logo 이미지 등 원본 이미지의 크기가 필요없는곳에 불필요하게 원본 이미지 크기만큼 다운받고 있어 이또한 문제가 된다. 잘 생각해보면, UI에 맞는 크기의 이미지를 불러오면 원본 이미지를 불러오는 것에 비해 속도도 더 빠르고 네트워크 트래픽도 더 낮아질 것이다.그럼 어떻..

시작하게된 계기8월부터 jscode에서 진행하고 있는 운영체제 모의면접 스터디를 하게되었다.올해부터 취업준비를 해야하기도 하고 혼자 운영체제를 공부하기 보다는 스터디를 통해 공부를 한다면 강제성도 생기고 무엇보다 현업 개발자 멘토가 있다는 것이 마음에 들어 참가하게 되었다. 1주일에 1회 2시간에서 2시간 30분씩 진행되었고, 매주 준비해야할 면접 질문을 바탕으로 면접준비를 해오면 된다. 나같은 경우 면접 질문에 대한 답만 준비하는게 아닌 해당 면접 질문으로 더 나올 수 있는 꼬리 질문도 준비해 갔다. 이렇게 준비해가면 6명에서 조를 구성해 모의면접을 진행하게 된다. 2명은 면접관, 1명은 지원자, 1명원 타임키퍼, 1명은 관찰자의 역할로 서로 돌아가며 모의면접을 하게된다. 그리고 면접을 하다보면 중간..

도입저번시간에 작성한 성능 테스트 자동화 환경 구축기(1)에 대한 내용을 정리해 보면, 성능 테스트를 위해 여러 가지 요소들이 필요했다. 우선, 성능 테스트를 위한 대량의 요청을 생성해주는 nGrinder, 서버 상태를 모니터링할 수 있는 PinPoint, 그리고 성능 테스트 대상이 되는 API 서버를 AWS 상에 구축해야 했다. 이를 위해 우리는 Terraform을 활용하여 AWS 자원(EC2, VPC, RDS 등)을 코드로 관리할 수 있도록 설정하였다. 하지만 단순히 AWS 자원을 콘솔이 아닌 코드로 관리할 수 있게 되었다고 해서 성능 테스트 자동화 환경을 구축했다고 말할 수는 없다. 그렇다면, 진정한 의미에서 성능 테스트 자동화 환경을 구축했다고 말하려면 무엇이 더 필요할까?자동화의 필요성성능 테스..