목록IT (224)
잡동사니
안녕하세요. yeTi입니다. 오늘은 테이블 명세서를 쉽게 만들어주는 오픈소스를 소개하려고 합니다. 배경 프로젝트를 진행하다보면 Excel 문서로 명세서를 작성해야할 일이 생깁니다. 이 때 테이블 수가 적다면 부담없이 업무를 진행할 수 있겠지만 테이블이 많거나(100개 이상) 관리하고 있는 데이터베이스의 수가 많다면 일일이 찾아가며 문서를 만들고 갱신하기는 것은 꽤 많은 업무시간을 할애하기도 하거니와 개발자 스스로 현타가 올 수 있는 시간입니다..ㅜ 이런 문제를 손쉽게 해결해 줄 수 있는 오픈소스가 나왔습니다!!! Solution 사용법은 다음과 같습니다. Python을 설치합니다. 소스를 다운로드 받습니다. 라이브러리는 다운로드 합니다. (requirements.txt) config.py 에 원하는 정보..
안녕하세요. yeTi입니다. 오늘은 Springframwork에서 제공하는 Transactional 의 옵션은 Isolation 의 특성을 MySQL 8.0의 공식 문서 를 통하여 정리하고자 합니다. 개요 모든 Database System은 ACID의 원칙을 준수하는 방향으로 만들어지는데요. ACID는 트랜젝션의 개념과 밀접하게 관련이 있습니다. 하지만 ACID 를 준수하면 높은 수준의 성능을 기대하기 어렵기 때문에, 데이터의 격리 수준을 나눠 성능과 데이터 일관성을 적절하게 조절하여 사용할 수 있도록 지원하고 있습니다. ACID Atomicity : 한 프로세스에서 보장되어야하는 데이터의 변경점이 일괄적으로 변경되거나 변경되지 않는 특징입니다. Consistency : 트랜젝션이 진행되는 동안에는 다른..
안녕하세요. yeTi입니다. 오늘은 Entity 에서 하나의 필드로 다수의 관계를 가지는 경우에 대해 생각해보려고 합니다. @OneToOne 관계 설정 GiftEntity 와 UseEntity 에 대해서 1:1 관계설정을 다음과 같이 설정했습니다. public class GiftEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "seq", length = 20, nullable = false, columnDefinition = "BIGINT(20)") private Long id; ... @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "useSeq") private..
안녕하세요. yeTi입니다. 오늘은 RestTemplate 으로 외부 연계시 간헐적으로 javax.net.ssl.SSLException 이 발생한 현상을 해결한 방법을 공유하고자 합니다. 증상 외부 서비스에 RestTemplate 으로 HTTP 요청시 대략 5건에 한건정도 아래와 같이 오류가 발생했습니다. javax.net.ssl.SSLException: Connection reset at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:127) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:349) ... Caused by: java.net.Socket..
안녕하세요. yeTi입니다. 오늘은 Spring Framework으로 http request를 처리할때 request string을 enum으로 바인딩하는 방법을 보면서 Spring에서 제공하는 바인딩 서비스들을 확인해보겠습니다. 이전에 작성한 스프링 추전 강좌, 스프링 프레임워크 핵심 기술 내용 정리 및 후기 에도 관련 내용이 있습니다. Converter 활용 Spring 에서는 모델을 바인딩하기 위해 Converter interface를 제공합니다. 그리고 http request가 들어오면 각 컨트롤러들은 BindingInitializer에 등록된 converter 들을 가지고 string 을 모델로 변환해줍니다. 이를 활용하여 http get 요청시 Path variable와 Request para..
안녕하세요. yeTi입니다. 오늘은 Mybatis를 사용하면서 결괏값을 받은 Object의 값이 상이하게 맵핑되는 현상을 해결한 내용을 공유하고자 합니다. 현상 MyBatis에서 sqlMapper를 활용하여 결괏값의 Object 맵핑 시 object의 필드에 예상과는 다른 값으로 맵핑되는 현상이 발견되었습니다. Mapper.xml TestEntity.java @Getter @Setter @Builder public class TestEntity { private Integer id; private String name; private String nickname; ... }Result -- SQL 결과 id = 10 nickname = yeti name = null -- Instance 값 TestEnt..
안녕하세요. yeTi입니다. 오늘은 백기선님의 스프링 강좌중 하나인 예제로 배우는 스프링 입문 의 완주 후기를 공유하려고 합니다. 강의 수강 계기 백기선님의 유튜브 동영상을 보다가 스프링을 제대로 공부했는지 5분안에 확인하는 방법 을 봤는데요. 문제가 이거였습니다. 외부 라이브러리를 사용하는 코드가 포함된 함수를 테스트하려면 어떻게 해야하는가? 단, Mock framework을 사용하지 않는다. 그래서 전 외부 라이브러리를 상속받은 mock 클래스를 구현하여 테스트 코드에 활용하는 것을 생각했습니다. (@SpyBean @MockBean 의도적으로 사용하지 않기 - 기억보단 기록을 참고) 하지만 백기선님의 해결책은 스프링에서 제공하는 IoC와 PSA를 활용해서 다음과 같이 제시합니다. 외부 클래스를 랩핑할..
안녕하세요. yeTi입니다. 금일은 SNS서비스의 인증 서비스를 개발하면서 사용했던 암복호화에 대한 기본 지식을 공유해보고자 합니다. 인코딩 (Encoding) 인코딩이란, 어떤 정보를 정해진 규칙에 따라 변환하는 것을 말합니다. 이를 테면 컴퓨터가 사용하는 이진 데이터를 사람이 인식할 수 있는 문자로 변화하는 것도 바이트 데이터의 인코딩(UTF-8)에 의해 생성되는 것입니다. 헥사 (HEX) 헥사 인코딩이란, 2진 바이너리 데이터를 16진수 데이터로 표현하여 데이터량을 줄여주는 역할을 한다. URL URL 인코딩은 URL에서 정의한 예약어를 다른 형태로 치환해주는 역할을 합니다. Base64 Base64 인코딩 은 64진수 인코딩으로 헥사 인코딩보다 더 간결하게 데이터를 표현할 수 있습니다. Base6..
안녕하세요. yeTi입니다. 오늘은 WEB2-Domain Name System (생활코딩) 을 완주한 후기를 기록하려고 합니다. 강의 수강 계기 현재 제가 블로그에 사용하는 이미지 파일들을 저장하기 위해 개인 나스를 사용하고 있는데요. HTTP로 도메인을 제공해줘서 잘 사용하고 있었습니다. 그런데 2021년 1월에 출시한 Chrome 88 부터는 모든 혼합 콘텐츠(Mixed Content) 다운로드를 차단하면서 HTTP로 제공하는 제 이미지 파일들이 크롬에서 안나오기 시작한것이죠.ㅜ 그래서 어떻게하면 HTTP로 사용하고 있는 도메인을 URL 변경없이 HTTPS로 적용할 수 있을지에 대해 고민하는중에 DNS에 대해서 먼저 알아야겠다는 생각이 들어서 강의를 정주행하게 됐습니다. 배운점 IP와 Host 인터넷..
안녕하세요. yeTi입니다. 오늘은 한국정보보호센터에서 제공하는 Web Java 시큐어코딩 교육을 수강한 후기를 공유하려고 합니다. 수강 계기 회사 프로젝트의 주관사 요구사항으로 수강하게 되었습니다. 강의 정보 기관 : (주)한국정보보호교육센터 교육명 : Web Java 시큐어코딩 강사 : 전상민 수석연구원 기간 : 2022년 01월 19일 ~ 2022년 01월 21일 10:00 ~ 17:00 (18h) 배운점 최신 개발보안 사고 핵심 키워드 웹사이트 해킹 웹사이트를 직접적으로 공격하는 방식 공급망 해킹 개념 : 서비스를 직접적으로 공격하는것이 아니라 제공자 개발자의 PC나 패치파일을 감염시킴으로써 서비스에 영향을 주게하는 방식 해결책 예시 jar파일을 내려줄때 해시검증으로 신뢰성을 얻는 방법 사례 위즈..