본문 바로가기

전체 글

(49)
[thymeleaf] fragment에 파라미터로 객체 전달 header나 navigator같은 반복되는 html을 fragment로 삽입하다가 controller에서 넘어온 객체를 fragment에서 사용해야할 일이 생겼다. 우선 사용할 정보를 model에 담아 넘긴다. fragment명(${attributeName})으로 객체 정보를 파라미터로 넘길 수 있다. fragment명 (attributeName)으로 객체 정보를 받아, 사용하면 된다.
Spring boot로 개발 시 resource 실시간 반영 (IntelliJ 기준) spring boot로 개발 중에 html을 수정하면서 화면을 만드는데 실시간 반영이 안되서 확인을 위해 리로드를 하려고 하니 서버를 내렸다가 올려야 반영이 되었다. spring의 경우엔 webapp 폴더에 정적 리소스(html/css/js)가 있어서 해당 경로로 tomcat이 동작하기 때문에 실시간 반영이 되지만, spring boot의 경우에는 resources 폴더 아래에서 정적 리소스를 관리하다 보니 갱신을 위해서는 tomcat을 재시작 해줘야한다. 수정할 때마다 수십번 내렸다 올렸다를 반복하려니 짜증이나서 실시간으로 반영되도록 설정을 했다. 우선 build.gradle에 spring-boot-devtools 의존성을 추가해주었다. 그 후, application.yml에 - spring.devto..
[1일차] Entity 만들기 미리 만들어둔 ERD를 기준으로 엔티티를 만들어 보았다. @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @Entity public class Member extends BaseTimeEntity { @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "user_id") private Long id; private String name; private String ifrandNickName; private String password; public Member(String name, String ifrandNickName, String password) { this.name = name; this.i..
VOC 리팩터링 프롤로그 현재 상황 현 직장에 처음 이직했을 때, 소스를 보고 1번, 이 소스가 3개월 전부터 만들어지고 있는 리팩터링된 소스라는 것에 2번 놀랐다. 외부업체에서 맡아서 만들었는데, 자신들의 프레임워크를 적용해놓았다고 한다. 이전 소스의 경우, java 6 + Jrun4(WAS 역할)를 사용하였고 그냥 JSP만으로 개발해 놓았던 것을 java 8 + Spring 기반으로 재구성해놓았다고 한다. 그나마 Spring으로 사용했으니 유지/보수가 수월하겠지.. 라고 생각했으나, Spring은 도무지 왜 넣어놓았는지 모르도록 만들어 놓았다. 자세한 히스토리는 잘 모르겠으나, 기간을 맞추기 위해 날림으로 만들어 놓았다는 것이 선명하게 느껴지는 소스였다. 보통은 위와 같은 MVC패턴을 사용하여 어플리케이션을 제작한다. Spr..
ifland 인물사전 개발 시작 SKT에서 만든 ifland라는 자칭 메타버스 앱이 있다. (사실 메타버스까지는 아니고 그냥 움직일 수 있는 3D아바타가 추가된 채팅앱 정도 되겠다.) 요즘 여기에 빠져 항상 접속을 해서 사람들이랑 놀고 있는데, 놀다 보니 특이한 캐릭터들도 많고 매일 사건사고도 많다. 이용자도 별로 되지않아 사실상 '두덕리 온라인'정도 되는 개하꼬 메타버스 앱에서 이런 캐릭터들, 사건사고들을 경험해보니 기록으로 남겨 친한 사람들과 공유하면 재밌을 것 같아 해당 프로젝트를 시작한다. 처음에 대충 구상 후, 필요하다 싶으면 추가적으로 살을 덧붙여가는 형식으로 진행할 예정이다. 메인페이지 상단에는 들어갈 메뉴들과 해당 메뉴들을 통해 필요한 정보들을 나열해 보았다. 기본으로 메뉴는 - 인물도감 - 자유게시판 - 공지사항 - 회..
[IntelliJ] 코드 템플릿(code template) 설정 코드를 짜다보면 반복되는 코드들이 있다. 인텔리제이에서는 테스트 코드 메소드를 만드는 것 같이 반복되는 코드를 특정 이름으로 템플릿을 만들어 사용할 수 있는 기능을 제공한다. 이 기능을 사용하기 위해서는 Ctrl + Alt + S키를 눌러 Settings 메뉴를 켠다. 그 후, template를 검색하여 Editor > Code Style > Live Templates를 클릭한다. 우측의 '+'를 눌러 Template Group 메뉴로 그룹별로 관리할 수 있다. 난 custom이라는 그룹을 만들었음. 그 후에 LiveTemplate 메뉴로 자신이 사용할 이름과 코드를 정해주면 된다. tdd라는 이름과 설명을 적어준 다음, 코드를 작성해준다. 코드가 전부 색으로 보인다면 Change 버튼을 눌러 언어를 설..
[Mybatis] SQL에서 부등호 사용 시, 에러 발생 xml에 SQL을 작성하는데 부등호를 넣었더니 에러가 발생했다. 에러 메세지를 보았더니, '요소 콘텐츠는 올바른 형식의 문자 데이터 또는 마크업으로 구성되어야 합니다.' 라는 문구가 나온다. 원인 쿼리 사용 시 '' 등과 같은 특수문자를 그냥 작성할 경우, 해당 문구를 태그로 인식하게 된다. 이럴 경우, 태그가 아니라 SQL이라는 사실을 인지시켜주어야 한다. 해결 이를 위해서는 CDATA(Character DATA)를 사용해야한다. /* SQL문 */ ]]> 다음과 같이 사용하며, 내용들은 전부 문자열 취급을 하게 된다. 주의사항 위의 예시와 같이 SQL문 전체에 적용시킨 경우에는 동적 쿼리를 사용할 수 없다. 동적쿼리를 사용하고 싶은 경우, 특수문자에만 CDATA 구문을 사용하면 문제없이 사용할 수 있다.
[MyBatis] application.yml에 설정한 mybatis 설정으로 셋팅하기 혼자 회사 프로젝트를 리빌드해보기 위해 프로젝트를 만들어 셋팅하다가 application에 mybatis설정을 할 수 있다는 것을 발견했다. 지금까지는 SqlSessionFactoryBean에 하드코딩으로 설정을 해주었는데 yml으로 관리할 수 있다니 너모 편리하자너.. 그래서 가독성 좋고 관리하기 편한 yml의 설정을 사용하여 myBatis를 연동해보았다. @Configuration @EnableTransactionManagement @MapperScan(value = "crm.aekyung.ak_crm_service.mapper", sqlSessionTemplateRef = "crmSessionTemplate") @RequiredArgsConstructor public class DataBaseCon..