분류 전체보기 썸네일형 리스트형 [튜토리얼] IntelliJ로 Hello World 찍기 저희 회사는 매년 현장 실습생들이 거쳐갑니다. Spring Boot 경험 여부를 묻기 위해 가장 먼저 하는 질문은 "헬로월드 찍을줄 아니?" 저 역시도 QA일을 하다가, 개발자 이직을 준비할때 가장 먼저 찾아보았던 것이 Hello World 였습니다. IntelliJ에서 좋은 예제를 제공하고 있는데, 이를 모르고 블로그를 참고했던 기억이 있습니다. 저희 회사에 오는 현장 실습생이나, 개발을 처음 시작하시는 분들에게 도움이 되었으면 좋겠습니다. 위 사진처럼 이름, 그룹, 아티팩트, 패키지명 등을 설정해줍니다. JDK가 설치되어 있지 않다면 IntelliJ를 통해서 설치할 수 있습니다. Spring MVC를 사용하기 위해 Spring Web을 선택해줍니다. package com.example.springbo.. [아이디어] 복합키(Composite-key), 쉽게 CRUD 해보자 데이터베이스 설계를 하다 보면 복합키(Composite-key)를 활용해야 하는 경우를 피할 수 없을 때도 있다. 만약 우리가 사용자에게 CRUD를 제공하는 웹 서비스를 개발한다면 이 복합키를 어떻게 처리해야 할 지 분명 고민에 빠질 것이다. 이 포스트에서는 AS-IS와 TO-BE 예제를 통해 Converter를 이용해 복합키를 지닌 엔티티의 CRUD를 매우 간편하게 처리할 수 있는 아이디어를 다룬다. 복합키를 가진 엔티티 정의 우선 AS-IS와 TO-BE를 설명하기 전에 복합키를 가진 엔티티를 정의해 보자 우선 Room.class 라는 엔티티를 정의하였다. 이 Room은 학년-반으로 이루어진 복합키를 가진다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2.. [Nginx] 웹사이트 크롤링 방지 여러 서비스를 운영하다 보면 정말 많은 크롤러들이 인터넷 망을 샅샅이 뒤지고 다닌다는 것을 체감하게 된다. 예를 들어 사내에서 운영중인 관리 시스템이 구글에서 검색이 될 때 깜짝 놀라게 되는데, 왜 미리 막지 않았을까 후회하면서 글을 적는다. 따로 robots.txt 파일을 루트 디렉토리에 보관할 수도 있지만 우리회사는 보통 nginx를 reverse proxy로 사용하기때문에 설정 파일에 직접 입력한다. nginx.conf server { listen 80; server_name hello.userinsight.co.kr; location /robots.txt { return 200 "User-agent: *\nDisallow: /"; } location / { proxy_pass http://loca.. [업무공유] 소프트웨어사업자 신고 절차 및 방법 조달청에 입찰참가를 하려는 경우 여러가지 증빙서류가 필요합니다. 그 중에 '소프트웨어사업자 신고'에 대해 알아보겠습니다. 소프트웨어사업자 신고란? 소프트웨어의 이용촉진 등 소프트웨어산업의 진흥을 위하여 필요한 경우 소프트웨어사업자로 하여금 기술인력, 사업수행 실적 등 관리에 필요한 사항을 분야별로 신고하도록 되어있는데, 소프트웨어 수요자에게 신뢰성 있는 정보제공을 통한 소프트웨어 이용촉진 등 산업의 건전한 발전을 도모하고, 중소소프트웨어사업자의 권익 보호를 목적으로 하고있습니다. ⊙ 소프트웨어사업자신고 분야 - 컴퓨터관련 서비스사업 - 데이터베이스 제작 및 검색서비스 사업 - 패키지소프트웨어 개발, 공급사업 - 디지털콘텐츠 개발서비스사업 ⊙ 관련 법령 - 소프트웨어진흥법 제58조(소프트웨어사업자의 실적 .. [Jackson] 순환참조 해결방법 시간표 관리 시스템을 개발하면서 피할 수 없는 Json 순환참조(Circular Reference) 문제가 발생하였다. 즉 직렬화를 하면무한 루프에 빠지게 되는 것. 문제점 과목(Subject)와 강의실(Room)은 다대 다(ManyToMany)관계를 갖는데, 서로 참조 관계에 있기 때문에 StackOverflowError가 발생 일반적인 해결책 일반적으로 @JsonIgnore를 이용해 해당 필드의 직렬화를 막거나, @JsonManagedReference - @JsonBackReference 쌍을 이용해 단방향으로만 직렬화가 가능하게 한다. 또 문제 하지만 우리는 조금 더 특별한 해결책이 필요하다. 순환참조 없이 양방향 직렬화가 필요하기 때문 즉 Subject 하뒤에도 Room 이 필요, Room 하위에.. [아이디어] 데이터베이스 행 삭제 처리 시 UK(Unique Key) 제약조건으로 인한 값 중복 문제 회피하기 개발을 하다 보면 UK(Unique Key) 제약조건을 이용해야 하는 경우가 빈번하게 발생한다. 유저인사이트에서는 데이터를 물리적으로 삭제하는 행위를 delete라 하며, 데이터를 물리적으로 삭제하지 않고 삭제된 것 처럼 보존하는 행위를 remove라 정의하여 활용 중에 있다. 겪었던 문제 가장 대표적으로 로그인 기능에 사용되는 사용자 ID(이하 username이라 함)를 예로 들 수 있는데, 만약 사용자가 탈퇴할 때 remove처리를 해야 한다면 이 username을 어떻게 처리해야 할 지 난감한 경우가 생길 수 있다. (사용자 입장에서는 만약 다시 가입하기를 희망한다면 같은 아이디를 사용할 확률이 매우 높기 때문에..) 솔루션 아래는 강의실 정보를 관리하는 테이블에서 UK인 강의실명을 재사용 할 수 .. [Redis] Spring Boot + Redis으로 세션 클러스터링(Session Clustering)하기 Spring Boot로 개발한 서비스를 로드밸런싱 하기 위해서는 별도의 세션 저장소가 필요하다. 가장 많이 쓰이는 Redis를 이용해 Spring Boot 애플리케이션의 세션 저장소로 사용하고, 여러 WAS가 동일한 세션 저장소를 사용하도록 하여 세션 클러스터링을 진행하기로 하였다. pom.xml org.springframework.boot spring-boot-starter-data-redis org.springframework.session spring-session-data-redis application.yml spring: redis: host: localhost port: 6379 session: store-type: redis UserinsightApplication.java @EnableR.. [JPA] 빈 문자열을 null로 저장하는 converter 만들기 JPA를 사용하여 웹 서비스를 개발하다보면 Form 전송을 해야 하는 경우가 많이 발생하는데 문자열을 담는 필드를 전송하다보면 의도치않게 null값이 아닌 empty-string이 삽입되는 경우가 발생한다. 따라서 빈 문자열이 데이터베이스에 저장될 때 null로 변환해주는 converter를 만들어 필드에 적용한다. EmptyStringToNullConverter.java @Converter public class EmptyStringToNullConverter implements AttributeConverter { @Override public String convertToDatabaseColumn(String string) { return StringUtils.trimToNull(string); }.. 이전 1 ··· 7 8 9 10 11 다음