분류 전체보기

    [Network] Https 는 브라우저에서 어떻게 인증과정을 거치게 되는걸까?

    원문 출처 nuritech 님의 설명을 기반으로 필자가 스스로 이해하기 쉽게 정리한 내용입니다. 자세하고 좋은 설명은 아래 블로그에서 확인 바랍니다! HTTPS 통신 원리 쉽게 이해하기 (Feat. SSL Handshake, SSL 인증서) 이 글을 쓰게 된 이유는,, 나의 평소 HTTPS 에 대한 지식은 HTTPS 가 암호화된 네트워크 통신 프로토콜이고 HTTPS 를 사용한 네트워크 통신에서는 주고받는 패킷을 까도 데이터가 암호화되어 있어 안 nuritech.tistory.com HTTPS 넌 도대체 뭐야? HTTPS(HyperText Transfer Protocol over Secure Socket Layer, HTTP over TLS, HTTP over SSL, HTTP Secure)는 월드 와이드..

    [Spring Boot] Spring Boot 에서 JPA 로 값을 수정시 알 수 없는 이유로 sql 에러가 발생할 때(feat. SQL Error: 1064, SQLState: 42000)

    발단 DB 에서 값을 변경하려고 JPA 를 통해 시도하였을 때 필자 입장에서는 단순한 VARCHAR(1) 구조의 필드 였음으로 수정되어 마땅한 상황이었지만, 왜인지 SQL Error: 1064, SQLState: 42000 오류가 지속적으로 발생하였다. 설명 필자가 사용한 테이블에는 DB 의 예약어를 포함하고 있었다 (예약어인지 모르고 필드로 사용). 테이블의 값을 수정하려 할 때 예약어를 수정하려 한 것은 아니지만, JPA 가 객체 형태로 영속성 매니저에게 값을 전달하고 있었기에 DB 에 전달한 query 를 실행하면서 syntax error 가 발생하게 된것이다. 예시 DB 구조 CREATE TABLE `test1` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `openYn..

    [Spring Boot] Spring Boot(Kotlin) Gradle 환경에서 docker 이미지를 추출하는 방법(feat. bootBuildImage)

    설명 환경 윈도우즈 docker desktop 설치됨 Spring Boot 프로젝트 kotlin Gradle 로 빌드툴을 설정했을 경우 다음과 같은 탭을 찾아볼 수 있다. Gradle 빌드 툴이 제공해주는 docker image 빌드 명령어이다. Image 저장되는 장소 아무런 설정을 하지 않았을 경우 docker 로컬에 저장된다. 이는 docker desktop 과 docker CLI 를 통해 확인 가능하다. docker command : docker images docker 이미지 변경 build.gradle.kts 파일에서 다음과 같이 작성할 경우 이미지명이 변경된다. tasks.getByName("bootBuildImage"){ imageName.set(".../request-test:latest..

    [MariaDB] TIME_TO_SEC 내장함수를 사용해서 TIME 형식의 string 값을 초로 변경해보자

    설명 MariaDB 는 TIME_TO_SEC(time) 내장함수를 제공한다. time : TIME 형식의 값을 의미한다. ex) TIME_TO_SEC('21:48:24') MariaDB 버전에 따라 다른 타입의 값을 반환한다. 5.3 이하 : INT 값을 반환한다. 5.3 이후 : DOUBLE 값을 반환한다. 5.3 이후의 MariaDB 버전에서는 DOUBLE 로 값을 반환하기 때문에 microseconds 까지 값을 보존한다. 사용 예시 SELECT TIME_TO_SEC('21:50:44'); -- > 78644 출처 TIME_TO_SEC Returns the time argument, converted to seconds. mariadb.com

    [MariaDB] STR_TO_DATE 내장함수를 사용해서 string 을 DATETIME 으로 변환하자.(feat. 사용예시)

    설명 MariaDB 에서는 STR_TO_DATE(str, format) 내장함수를 제공한다. str : string 형태의 입력값이다. format : format 형식의 string 입력값이다. ex) STR_TO_DATE('21:31:58', '%H:%i:%s') STR_TO_DATE 는 str 에 따라서 DATE, TIME 혹은 DATETIME 으로 반환하게 된다. 만약 str 을 시간, 날짜 형식의 값으로 입력하지 않게 되면 null 이나 syntax error 를 응답하게 된다. 사용 예시 특정 영상의 시간을 기록하는 테이블이 있다. 테이블에서는 videoLength 컬럼을 기록하고 있으며 그 형태는 'HH:mm:ss' 형태의 값이다. 테이블을 활용해서 영상의 총 시간에 대해 추출해보자. CRE..

    [MariaDB] csv 형태로 저장된 필드를 조회하고 싶다면 사용하는 내장함수 FIND_IN_SET

    발단 외래키로 존재하는 값이 달라지지 않는다고 가정하고, 우리는 DB 를 설계할 때 종종 조회를 위해 외래키를 csv 형태로 가지는 field 를 설계한다. 이런 상황에서 조회할 때 사용하면 좋은 내장함수를 발견하게 되었다. 설명 만약 csv 형태로 값을 저장하는게 아니라면 field 에 특정구조를 가지게 한다. 예를들면 prefix, suffix 로 `|` 를 사용하는 것이다. 1,2,3 -> |1|2|3| 으로 저장하여 3을 조회하고 싶을 때 |3| 을 조회하면 된다. 위와 같은 구조도 상황에 따라서 사용하면 되지만, 처음에 csv 형태로 값을 저장하기로 하였기에 구조를 변경하고 싶지 않았다. 따라서, FIND_IN_SET 을 통해 문제를 해결하였다. 해결 FIND_IN_SET 은 두개의 파라미터를 ..

    [Spring Boot] RestTemplate 으로 ASP.Net 서버와 통신하려 할 때 특정 field 가 전송되지 않는 이슈(feat. Gson)

    발단 ASP.NET 이라고 규정할 수 없지만, 필자는 특정 서버와의 통신에서 왜 인지 특정 이유는 알 수 없지만 field 가 전달되지 않는 이슈를 겪었다. 설명 - 요청 메서드는 post 방식을 사용하였고 그에 따라 body 에는 객체를 담아 전송하였다. - body 객체는 String 과 List 을 포함하는 흔한 dto 이다. - 왜인지 ASP.NET 서버는 field validation 에 실패하였다는 값을 응답하였고 필자가 전송할 때 실수한게 있나 싶어 cURL 로 요청을 보냈을 때 요청은 성공적이었다. 해결 - 설명에서 언급한대로 여전히 정확한 이유에 대해서는 알지 못한다. - 그러나, cURL 로의 요청이 성공했다는 것을 근거로 객체의 serialize 과정에서 문제가 있을 수 있다고 생각하..

    [Nginx] 윈도우즈 환경에서 localhost 로 접근은 되는데 할당받은 ip 로는 접근이 안될때 (feat. ahn lab transaction)

    발단 nginx 를 다운받아서 실행하고, localhost 로는 접근이 가능하지만 할당받은 private ip 로는 접근이 불가한 어이없는 일이 발생하였다. 따라서 정리해보고자 한다. 과정 무려 3일이 걸려 알아낸 문제로써 3일 동안 걸릴 이슈는 아니라고 생각합니다. 1일차 - localhost 로의 통신을 확인하고, 외부에서 접근이 가능하게끔 방화벽의 특정 포트를 열어두고 접근이 가능하게끔 설정하였다. - 포트포워딩 까지 마치고 외부에서의 접근을 테스트 하는데, timeout 이 발생하였다.. 2일차 - 방화벽의 문제일 수 있다고 생각하여, 방화벽을 모두 내렸지만 여전히 동작하지 않았다. - 다른 문제는 찾아볼 수 없었고 컴퓨터를 재부팅해보지는 않았지만 여전히 동작하지 않았다. 3일차 - 데스크톱이 아..

    프로그래머스 :: 연습문제 :: 연속된 부분 수열의 합

    풀이 /** * 설명 * - 투 포인터 알고리즘을 사용하여 문제를 풀이하였다. * - 투 포인터 알고리즘은, 구간합을 구할 때 사용한다. * */ class 연속된_부분_수열의_합 { fun solution(sequence: IntArray, k: Int): IntArray { val answerList = mutableListOf() var sum = sequence.first() var start = 0 var end = 0 val sequenceSize = sequence.size while(end < sequenceSize){ /** * 설명 * - end가 sequenceSize와 같아졌을 때 sum이 k보다 작으면 더 이상 계산할 필요가 없다. * */ if(end == sequenceSize..

    프로그래머스 :: 연습문제 :: 무인도 여행

    풀이 class 무인도여행 { fun solution(maps: Array): IntArray { val answer = mutableListOf() val width = maps[0].length val height = maps.size val visited = Array(height) { IntArray(width) { 0 } } lateinit var twoDimensionTargetIndex: Pair /** * 설명 * - 지도의 모든 부분을 탐색한다. * * 동작예시 * - 조건1 : 방문하지 않은 곳 * - 조건2 : 섬인곳 * - 위 두 조건을 만족할때 dfs 를 통해 인접한 섬에 대한 음식의 갯수를 추출한다. * */ for (rowIndex in 0 until height) { for ..

728x90