반응형

전체 글 428

(Mac OS) git The requested URL returned error: 403 해결 방법

프로젝트 작업 후 git 명령어를 사용하는데 오류가 발생하였습니다. 이유는 github에서 8월 13일부터 password 인증을 중단했기 때문인데요. Please use a personal access token instead. 패스워드 인증 대신에 개인 엑세스액세스 토큰을 생성하여 인증을 하는 방식으로 변경되었으니 액세스 토큰을 이용하라고 합니다. https://docs.github.com/en/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-access-token Creating a personal access token - GitHub Docs Personal access tokens (..

Programming/Error 2021.08.15

git clone Error - HTTP Basic: Access denied, gitconfig: Permission denied

git clone Error, 금일 새로운 프로젝트 기본 세팅 후 작업을 하기 위해 clone 하던 중 발생한 에러입니다. 에러를 해결하고 project를 정상적으로 clone 했지만 아쉽게도 정확한 원인이 무엇이었는지, 이 해결 방법이 어떤 영향을 줘서 해결된 건지는 파악하지 못했습니다. 발생한 에러는 다음 두 가지 에러입니다. - HTTP Basic: Access denied - Could not lock config file C:\Program Files\Git\mingw64/etc/gitconfig:Permission denied 프로젝트에 권한이 정상적으로 적용된 것을 확인하였고, 평소와 같은 방법으로 access token 정보를 담은 주소를 가지고 project를 clone 하였습니다. Cl..

Programming/Error 2021.08.12

Redis란? 레디스의 기본적인 개념 (인메모리 데이터 구조 저장소)

Redis란? Key, Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터 베이스 관리 시스템 (DBMS)입니다. 데이터베이스, 캐시, 메세지 브로커로 사용되며 인메모리 데이터 구조를 가진 저장소입니다. * db-engines.com 에서 key, value 저장소 중 가장 순위가 높습니다. Redis에 대해서 더 자세하게 알아보기 전 캐시 서버(Cache Server)에 대해서, 데이터 베이스가 있는데도 Redis라는 인메모리 데이터 구조 저장소를 사용하는 이유는 무엇일까요? 데이터 베이스는 데이터를 물리 디스크에 직접 쓰기 때문에 서버에 문제가 발생하여 다운되더라도 데이터가 손실되지 않습니다. 하지만 매번 디스크에 접근해야 하기 때문에 사용자가 많아질수록 부하가..

Programming/Web 2021.08.12

JWT 토큰 기반 인증 시스템 (JSON Web Token)

Spring Boot + Security + JWT + Redis 를 기본으로한 RESTful API를 구현하기로 계획하며 토큰 기반 인증 시스템 JWT에 대해서 다시 한번 정리합니다. 토큰 기반 인증 시스템이란, 먼저 웹 보안은 요청하는 사용자를 식별하는 인증 (Authenticate)와 인증된 사용자가 보호된 리소스에 접근할 권한이 있는지 확인하는 인가 (Authorize) 가 바탕이 됩니다. 토큰(Token) 기반 인증 시스템은 인증을 받은 사용자에게 토큰을 발급하고, 사용자가 서버에 요청을 할 때 헤더(Header)에 발급 받은 토큰을 함께 보내도록 하여 유효성을 검사합니다. * 사용자의 정보를 세션에 계속 유지해야 하는 서버 기반 인증 시스템과 달리 연결을 유지하지 않는 stateless 구조를..

IntelliJ Community version Spring Boot Project 생성하는 방법

IntellJ Community version Spring Boot Project 생성하는 방법입니다. 인텔리제이 커뮤니티 버전을 사용하신다면 New Project에서 스프링, 스프링 부트 프로젝트를 생성하는 'Spring Initializr' 을 찾을 수 없습니다. 그렇기 때문에 다른 방법을 이용해야 하는데요. https://start.spring.io/ 방법들 중 하나로 start.spring.io 사이트를 이용하는 방법이 있습니다. 프로젝트 생성 방법은 아주 간단합니다. 좌측 메뉴를 기준으로 원하는 프로젝트 Maven, Gradle 선택 및 언어와 Spring Boot 버전을 선택하고 프로젝트의 Metadata, 패키징 방법, Java 버전을 입력합니다. 그리고 우측 ADD DEPENDENCIES를..

RESTful API 개념과 특징, 설계 시 중요한 점 (Representational State Transfer)

RESTful API (Representational State Transfer) 란, REST API는 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용한 웹의 장점을 최대한 활용한 아키텍쳐 스타일입니다. 자원의 이름 (자원의 표현) 으로 구분하여 해당 자원의 상태 (정보) 를 주고받는 모든 것을 의미하며, 조금 더 자세하게는 HTTP URI로 자원을 표현하고, Method (GET, POST, PUT, PATCH, DELETE)를 통해 자원에 대한 처리를 합니다. RESTful API는 Resource (자원) + Method (행위) + Representation of Resource (자원의 형태) 세 가지로 구성됩니다. Resource : 서버는 Unique 한 ID를 가지는 Resource를 ..

Programming/Web 2021.08.10

TransactionRequiredException: Executing an update/delete query 오류의 해결 방법은 @Transaction

Executing an update/delete query Error Springboot, JPA 를 사용한 프로젝트 개발 중 발생한 에러입니다. FAQ 카테고리를 삭제하면 해당 카테고리에 속하는 FAQ들을 모두 삭제시키는 경우에서 발생했습니다. (삭제라고는 하지만 실제로는 useAt 필드 값을 통해 삭제 여부를 변경 즉, update 하는 로직입니다.) 정상적으로 FAQ Category 삭제 요청이 들어왔을 때 해당 FAQ Category의 useAt 값을 바꾸고, categoryIdx를 통해 해당 카테고리에 속하는 모든 faq의 상태값을 삭제 된 것으로 바꾸는 과정에서 아래와 같이 JPA를 사용한 void method로 update를 실행했습니다. @Override public void deleteA..

Spring MVC 프론트에서 컨트롤러로 input name 으로 값 여러개 전달하기 Ajax

ajax 사용하여 프론트 -> 컨트롤러 input name 으로 입력 값 여러개 전달하는 방법 선택1 선택2 MVC 프로젝트에서 저런 형태로 반복되는 여러개의 데이터들을 컨트롤러로 보내야 하는 상황이 있습니다. 프론트에서 입력한 값을 javascript에서 체크하여 ajax 통신으로 컨트롤러에 보내는 방법을 사용했습니다. * 실제로는 javascript로 팝업창을 띄우고 설정 창을 열어 값을 입력받는 상황이라 ajax를 사용하여 통신하고 팝업창을 닫는 과정까지 진행했지만 javascript를 거치지 않고도 프론트 -> 컨트롤러로 여러 개의 값을 보낼 수 있습니다. 동일한 형태의 반복되는 값이기 때문에 for문을 통해 객체를 생성해서 배열로 넘기는 방법을 사용하였습니다. 위의 방법으로 param을 생성하여..

input type=datetime-local 최솟값 min, 현재값 value 적용하는 방법

프로젝트 중 input을 통해 날짜 외 시간도 함께 받아 오는 것이 필요하여 input type="datetime-loacl"을 사용하였습니다. 그 과정에서 사용한 최솟값 min 설정, 현재값 value 설정 방법에 대해서 알아보겠습니다. min, value를 설정하기 위해서는 YYYY-MM-DDTHH:mm:ss 형식의 시간이 필요합니다. Javascript의 날짜와 시간은 Date 객체로 표현할 수 있는데요. let nowDate = new Date(); console.log('nowDate : ' + nowDate); // nowDate : Sun Aug 08 2021 11:22:13 GMT+0900 (한국 표준시) let toISOStringDate = new Date().toISOString();..

o.a.h.c.protocal.ResponseProcessCookies : Invalid cookie header

springboot 프로그램 동작 중 발생한 Invalid cookie headeer 오류 2021-08-05 13:17:32.243 WARN 10664 --- [ restartedMain] o.a.h.c.protocol.ResponseProcessCookies : Invalid cookie header: "Set-Cookie: AWSALB=GLC7UzreO+rTzXNlwMuiB6mONl3Ih++VelqGEo8WUnZ8XsW7l9RwIDsOXFipfqfNFHjkWEwl2vbSpLuPj30vNHsti8uYx8pNudxsFmF2g5z5WK4dMyiAN8AKy4ng; Expires=Thu, 12 Aug 2021 04:17:32 GMT; Path=/". Invalid 'expires' attribute: Thu..

Programming/Error 2021.08.07

lucy-xss-servlet-filter 적용하며 발생한 오늘의 오류, & 그리고 &amp

lucy-xss-servlet-filter를 적용하며 발생했던 오류 기록 lucy-xss-servlet-filter를 알기 전 먼저 XSS 크로스 사이트 스크립팅 공격의 개념에 대해서 알아보겠습니다. XSS (Cross Stie Script), 크로스 사이트 스크립팅 공격 XSS는 웹 어플리케이션의 게시글 같은 곳에서 공격자가 악의적으로 스크립트를 삽입해 공격하는 기법입니다. 이 공격은 사용자(클라이언트)를 대상으로 이뤄지며, 웹의 게시판 같은 곳에서 데이터를 서버로 저장할 때 데이터에 대한 검증이 이뤄지지 않거나 xss에 대한 방어 대비가 없다면 스크립트가 포함된 데이터가 저장되어 사용자가 해당 글을 클릭했을 때 스크립트가 실행되어 유저의 개인정보 및 데이터를 탈취하는 상황이 발생합니다. 그리고 이러한..

Programming/Error 2021.08.05

Java Primitive Type (원시 타입), Wrapper Class (래퍼 클래스) 차이점

프로젝트를 하면서 대부분의 경우에 Long을 쓰면서 가끔 어떤 경우에서는 IntelliJ가 자동으로 Long을 long으로 바꿔주는 경우가 있었습니다. 왜 그런지 이유를 몰랐고, 궁금하지도 않았다는 것을 반성하며 Java의 원시 타입 Primitive Type과 래퍼 클래스 Wrapper Class의 차이에 대해서 알아보았습니다. 먼저 Primitive Type, Wrapper Class에 어떤 것들이 해당하는지 보겠습니다. Primitive Type Wrapper Class byte Byte short Short int Integer long Long float Float double Double boolean Boolean char Character 원시 타입으로는 byte, short, int, l..

Programming/Java 2021.08.04

웹사이트 네이버 웹 페이지 최적화 (robots.txt, 선호 URL, Open Graph, 모바일 사용성)

개발한 웹사이트를 배포하고 서비스 하는 부분에 있어서 검색엔진 최적화는 중요한 부분입니다. 최적화 과정에서 적용한 네이버 서치어드바이저 Search Advisor 웹 페이지 최적화를 적용한 방법을 보겠습니다. 최초 사이트 등록에서 사이트의 소유 확인을 위한 HTML 태그를 넣고 소유 인증을 하고 나서 해당 사이트 주소를 입력하면 웹 페이지 최적화 테스트를 할 수 있습니다. 위 부분에서 선호 URL, robots.txt, 페이지 제목, 페이지 설명, Open Graph 제목, Open Graph 설명, 모바일 사용성 부분을 활성화 시키는 방법입니다. robots.txt 를 제외한 모든 것은 html 의 태그 안에서 적용할 수 있습니다. thymeleaf 또는 tiles 탬플릿을 사용하신다면 해당 탬플릿의 ..

Programming/Web 2021.08.03

nohup 명령어를 사용해도 프로세스가 종료되는 경우 해결 방법

서버에 서비스를 배포 중 터미널이 종료되어도 프로세스가 지속되도록 하기 위해 찾은 방법이 nohup 명령어입니다. 처음 nohup 명령어를 사용하여 프로젝트를 실행했을 때는 터미널 종료 후에도 서비스가 계속 동작하는 것을 확인하였으나, 마무리 작업에서 갑자기 nohup 명령어를 사용해도 프로젝트가 종료되는 경우가 발생하여 찾은 해결 방법입니다. 우선 nohup 명령어는 리눅스(Linux)에서 프로세스를 실행한 터미널의 세션 연결이 끊어지더라도 계속 동작할 수 있게 해주는 명령어입니다. 원리는 터미널에서 로그아웃이 발생하면 리눅스는 해당 터미널에서 실행한 프로세스들에게 hup signal을 전달하여 종료시키는데, nohup 명령어가 이 hup signal을 무시하는 명령어기 때문에 터미널 연결이 끊어지거나..

Programming/Linux 2021.08.01

MySQL 한글 물음표, 한글 깨짐 해결 방법 (mysql 5.6)

서버에 프로젝트를 배포하여 테스트하던 중 Database Schema 설정을 utf8으로 했는데도 insert 되는 한글이 '???'로 깨져서 들어가는 현상이 발행하여 해결 방법을 찾아보았습니다. * 사용된 mysql 버전은 5.6 버전입니다. 이러한 현상이 발생하는 이유는 mysql 의 character set을 명시적으로 설정하지 않으면 MySQL 5.7 이하 버전은 latin1, MySQL 8은 utifmb4가 default 값으로 설정되기 때문이라고 합니다. 해결 방법은 아래 과정에 따라 charater set을 명시해주면 됩니다. mysql에 접속하여 status 명령어를 입력하면 Server charcterset, Db charcterset이 latin1으로 설정된 것을 확인할 수 있습니다. ..

Programming/MySQL 2021.07.31
반응형