본문 바로가기

STUDY

(287)
MacOs | Warning: the fonts "Times" and "Times" are not available for the Java logical font "Serif"... MacOs를 이번에 Monterey로 업데이트했는데.. Warning: the fonts "Times" and "Times" are not available for the Java logical font "Serif", which may have unexpected appearance or behavior. Re-enable the "Times" font to remove this warning.에러 발생.. Times서체가 없다고 뜨는거였다.. Times서체를 설치하면 해결된다.. 공유를 위해 작성해봅니다.. [https://stackoverflow.com/questions/68608157/how-can-i-fix-this-warning-the-fonts-times-and-times-are-not-av..
React | 반응형 테이블을 만들어보자.. 테이블처럼 보이지만 은 사용하지 않는다.. 결과물 데스크탑에서는 이렇게 보이고, 모바일에서는 이렇게 되도록 만들거다. 원하는 거.. 제목 셀은 항상 존재하고 제목 셀의 넓이는 항상 일정하다. 모바일에서는 제목, 내용 한 쌍이 무조건 한 열을 다 차지한다. 한 열에 두 개 혹은 네 개의 셀이 들어갈 수 있다. 컴포넌트 만들기.. Table: 테이블 전체를 감싸는 div TableRow: 한 열을 감싸는 div TableCell: 제목 + 내용으로 이루어진 한 쌍 일단 styled-components를 사용하기 떄문에 스타일을 정의할 파일을 하나 생성한다. // Table.styled.js import styled from 'styled-components'; export const Style..
JPA | @Converter, @Convert (+ @Convert 먹히지 않을 때) 지금 하는 프로젝트가 레거시 디비를 이용해야 하는데.. 데이터 베이스 구조나 값을 변경할 수는 없고.. 1, 2 등에 해당하는 값을 일일이 찾아보는 것도 귀찮아서 ENUM으로 변환해서 사용하고자 한다.. ENUM 정의 예를 들어 1은 진돗개, 2는 삽살개...를 의미한다고 할 때.. 대충 이런 구조의 ENUM을 정의할 수 있다. @Getter public enum DogBreed { JINDO(1, "진돗개"), SAPSAL(2, "삽살개"); private int num; private String name; Animal(int num, String name) { this.num = num; this.name = name; } } 한 두개 일 때는 외울만 하지만 값도 여러개에 테이블마다 1, 2, 3...
Spring Boot | SMTP (worksmobile 메일) 필요한 의존성을 추가한다. implementation 'org.springframework.boot:spring-boot-starter-mail'설정 파일에 메일 발송계정 정보를 입력한다. spring: mail: host: smtp.worksmobile.com port: 587 username: 발송계정 메일주소 password: 발송계정 비밀번호 properties: mail: smtp: auth: true starttls.enable: true 회사 메일이 웍스모바일 메일을 이용하고 있기 때문에 해당 정보로 입력해줬다. 정보를 확인하는 방법은, 환경설정 > 고급설정 > IMAP/SMTP에서 확인할 수 있다. HTML태그를 이용해 메일을 발송하고자 한다면 MimeMessage를 이용해야..
Spring Boot | RestTemplate PATCH 사용하기 RestTemplate으로 API 요청 중 PATCH메서드를 사용하면 계속 에러가 발생했다. 해결하기 위해서는 RestTemplate의 RequestFactory세팅이필요하다. 먼저 build.gradle에 의존성을 추가한다. // RestTemplate PATCH, PUT method 사용 위해 추가 implementation 'org.apache.httpcomponents:httpclient:4.5.13' 그리고 사용할 때 setRequestFactoryy()를 호출해 HttpComponentsClientHttpRequestFactory를 세팅한다. 이렇게 설정 후 PATCH요청을 하면 에러 없이 잘 작동한다. // Http PATCH method 사용 위해 RequestFactory를..
Spring Boot | JPA사용 중 기본키를 UPDATE해야 할 때.. 기본적으로 Primary key를 변경한다는 것이 말이안되지만.. 레거시 디비로 디비 구조를 변경할 수 없는 상황이기 떄문에 부득이하게 PK값을 변경하게 되었다. JPA에서는 기본키를 변경할 수 없다. 기본키 값을 변경하고자 한다면 JDBCTemplate이나 MyBatis등으로 우회해야 한다. MyBatis가 사용하기에는 더 편하지만, 그렇게 되면 또 라이브러리를 추가해야 하기 때문에 JDBC를 사용하기로 했다. 사용 예시 name, addr, age라는 값을 조합한 복합키가 기본키로 사용되고, 이 값을 수정할 수 있다고 가정한다. Repository는 분리해서 작성한다. 먼저 인터페이스를 작성하고, public interface MemberJdbcRepository { int update(String ..
Spring Boot | Spring Security Test @WithMockUser를 커스터마이징 해서 사용하자 스프링 시큐리티가 적용되어 있는 프로젝트에서 컨트롤러 통합 테스트 작성 중.. @WithMockUser만으로 해결되지 않는 경우가 발생했다. @WithMockUser 가장 쉽게 특정 유저를 설정해 테스트를 진행하는 방법이다. username, password, roles 등 항목을 입력할 수 있다. 아래와 같이 사용하면, test라는 유저명을 가진 가짜 유저를 생성한다(mocking user) 물론 입력한 값들이 사용된 Authentication이 SecurityContext에도 올라간다. @WithMockUser(username = "test", roles = "USER") @Test void withMockUserTest() { ... } 하지만 커스텀된 Authentication 인증 정보는 사용할..
Spring Boot | HandlerMethodArgumentResolver로 Authentication 정보 간단하게 받기 Spring Security를 사용하면 인증된 사용자의 정보를 Authentication 객체를 통해 받을 수 있다. Authentication은 SecurityContextHolder에 저장되어 있음 HandlerMethodArgumentResolver HandlerMethodArgumentResolver 인터페이스는 두 개의 메서드를 구현하도록 하고 있다. supportsParameter(): 주어진 메서드 파라미터를 이 reolver로 지원할지 여부 resolveArgument(): 파라미터에 전달할 객체를 생성 boolean supportsParameter(MethodParameter parameter) Object resolveArgument(MethodParameter parameter, Mo..