목록전체 글 (373)
삶 가운데 남긴 기록 AACII.TISTORY.COM
좋은 캐릭터를 만드는 가이드캐릭터를 만들 때는 다음 질문으로 시작하십시오.이 인물은 지금 무엇을 원하는가?그것을 얻지 못하게 막는 것은 무엇인가?압박을 받았을 때 어떤 선택을 하는가?그 선택이 주변 인물과 어떤 갈등을 만드는가?좋은 캐릭터는:캐릭터에 강한 욕망을 부여하면서 욕망을 성취하기 불리한 약점을 설정하고 그럼에도 불구하고 욕망을 성취하기 위한 장점을 부여해야 합니다.특성을 과장시켜야 합니다. 장단점을 극명하게 대립하여 묘사하고 단점으로 개그 소재를 삼으면 됩니다.호감형 캐릭터는 심리학적으로 선망의 대상이지만 공감가는 약점이 있어야 사람들은 더 호감을 느낍니다. 캐릭터는 자신의 성공 그 이상을 향해 노력할 때, 캐릭터의 운명(굴레)을 벗어나도록 노력해야 사랑받습니다.동정심유발 캐릭터는 피해자 포지션..
https://aacii.tistory.com/503 스프링 부트 JWT 인증 구현 가이드 2편: 인증 필터와 보호 API 접근1편에서는 이메일과 비밀번호를 검증한 뒤 JWT 액세스 토큰을 발급했습니다.https://aacii.tistory.com/502 스프링 부트 JWT 인증 구현 가이드 1편: 로그인과 액세스 토큰 발급스프링 시큐리티스프링 부트blog.aacii.net JWT 인증은 정상 토큰으로 API 호출에 성공했다고 끝나지 않습니다.실무에서는 인증정보가 없는 요청과 권한이 부족한 요청을 구분하고, 만료되거나 변조된 토큰에 일관된 오류를 반환해야 합니다.액세스 토큰 만료 시간을 짧게 운영한다면 리프레시 토큰 정책도 필요합니다.다음 내용을 구현하고 점검해보겠습니다.1. 401과 403 오류 구분2..
1편에서는 이메일과 비밀번호를 검증한 뒤 JWT 액세스 토큰을 발급했습니다.https://aacii.tistory.com/502 스프링 부트 JWT 인증 구현 가이드 1편: 로그인과 액세스 토큰 발급스프링 시큐리티스프링 부트 REST API에서 사용할 JWT 인증을 구현해보겠습니다.먼저 로그인 요청을 검증하고, 인증된 사용자를 식별할 수 있는 액세스 토큰을 발급해야 합니다.Spring Security가 아이blog.aacii.net그러나 토큰을 발급하는 것만으로는 인증이 완성되지 않습니다.클라이언트가 API를 호출할 때 전달한 JWT를 서버가 읽고 검증한 다음, Spring Security와 호환이 되는 인증정보로 변환해야 합니다.1. 클라이언트가 Authorization 헤더에 JWT 전달2. JWT ..
스프링 시큐리티스프링 부트 REST API에서 사용할 JWT 인증을 구현해 보겠습니다.먼저 로그인 요청을 검증하고, 인증된 사용자를 식별할 수 있는 액세스 토큰을 발급해야 합니다.Spring Security가 아이디와 비밀번호를 확인하는 과정부터 구현한 뒤, 인증에 성공했을 때 JWT를 발급해야 합니다.전체 흐름은 다음과 같습니다.1. 클라이언트가 이메일과 비밀번호로 로그인 요청2. AuthenticationManager가 인증 처리3. UserDetailsService가 사용자 조회4. PasswordEncoder가 비밀번호 비교5. 인증 성공 시 JWT 생성6. 클라이언트에 액세스 토큰 반환Spring Security에서 AuthenticationManager는 인증 요청을 처리하는 중심 인터페이스입..
서버 사이드 랜더링(SSR)은 브라우저로 필요한 화면(html)을 전송해주는데, 보통 jsp나 Thymeleaf 등을 사용합니다.그런데 REST API 서버 처럼 JSON(혹은 XML)을 이용해서 데이터를 주고 받는 경우, 무상태에다가 화면을 제공하지 않기 때문에 HttpSession이나 쿠키로 인증하는 방법에 제한을 받습니다.따라서 이런 제한을 피하기 위해 토큰을 이용해서 인증하는 방법을 JWT(JSON Web Token) 이라고 합니다.인증(Authentication): 사용자의 아이디와 비밀번호가 올바른지 확인합니다.JWT 생성: 인증에 성공하면 사용자 정보를 담은 JWT를 생성합니다.JWT 전송: 생성된 JWT를 클라이언트에게 응답으로 보냅니다.인가(Authorization)와 보호된 리소스 접근..
AI 도구는 경쟁이 매우 치열해서 하루가 다르게 발전 중이라 현재 우위에 있어도 언제 신기술을 들고 나올지, 가격 정책은 어떻게 바뀔지 등등 변화가 빨라 섣불리 결정하기 힘든 상황입니다.즉, 서로 표준으로 자리 잡으려 경쟁 중이라고 할까요.그래서 선택을 위한 기준을 잡고 적은 비용으로 최적화된 AI를 고르기 위해 기준을 세우고 장단점을 비교해 보았습니다. 개발자용 AI 툴을 고르는 기준1. 코드 문맥 이해력이 중요.2. IDE와의 통합: VSCode, IntelliJ, Cursor 등3. 리팩토링, 버그 수정, 에러 분석, 테스트 제안 능력4. 보안과 배포 방식(금융권, 공공용)5. 과금 방식6. 러닝 커브 AI 도구 장단점 비교AI 도구장점단점ChatGPT Codex(Open AI)에러 로그 해석,..
요약모티브가 되는 작품을 감상1회차: 감상2회차: 이야기 구조 파악(플롯)3회차: 연기, 연출 기법 파악감상 종료 후 복기: 기억만으로 그 시나리오와 연출을 최대한 재현해서 쓰기모작이야말로 최고의 트레이닝이다. 감상·분석·복기로 배우는 모작 트레이닝모작의 목적은 원작을 똑같이 재현하는 데 있지 않습니다.완성된 작품이 독자의 감정을 움직이는 원리를 발견하고, 그 원리를 자신의 새로운 이야기에서 활용하는 것이 진짜 목표입니다.작품을 재미있게 감상하는 것과 작품이 만들어진 원리를 이해하는 것은 서로 다른 일입니다.작가를 목표로 한다면 한 작품을 여러 번 감상하면서 이야기의 구조와 표현 방식을 단계별로 분석해 보는 훈련이 필요합니다. 단계훈련 내용주요 목적1회차작품을 편하게 감상한다독자로서 받은 감정과 인상을..
후킹이란?★ 후킹이란 정보를 적절히 감추고, 인물에게 관심을 갖게 하며, 다음 장면을 볼 이유를 제공하는 기술입니다.후킹은 시선을 사로잡는 포인트를 말합니다.숏폼, 광고, 스토리의 도입부에서 시선을 잡기 위해 사용합니다.예측하는 다음 순간을 뒤집어야 합니다. 하지만 후킹은 독자를 속이거나 무조건 놀라게 만드는 기술이 아닙니다.무분별한 후킹으로 독자를 속인다면 분노를 사게 됩니다.하지만 일부러 노이즈 마케팅을 하기도 하죠. 후킹의 구조강한 후킹은 대체로 다음 구조를 가집니다.익숙한 상황을 제시한다.→ 한 가지 비정상적인 요소를 넣는다.→ 독자가 질문하게 만든다.→ 작은 답을 준다.→ 더 큰 질문으로 연결한다. 즉, 작품의 첫 장면을 만들 때는 다음 네 가지를 점검하면 좋습니다.첫 장면(페이지)에서 이상하..
1화에서 보여줘야 할 것★ 독자가 다음 화를 누르게 만드는 힘은 이해하기 쉬운 목표와 아직 풀리지 않은 질문에서 나옵니다.연재물에서 1화는 세계관을 모두 설명하는 소개서가 아닙니다.1. 어떤 인물을 따라가게 되는지2. 어떤 문제가 벌어지는지3. 앞으로 어떤 재미를 기대할 수 있는지이 세가지를 보여줘야 합니다. 첫 장면은 작품의 분위기를 보여줄 것★ 중요한 것은 독자가 “왜 이런 일이 생겼지?” 또는 “이 인물은 어떻게 행동할까?”라는 질문을 떠올리게 만드는 것입니다.첫 장면은 독자가 장르와 정서를 짐작하게 하는 표지판입니다.1. 로맨스라면 두 인물의 관계가 흔들릴 순간을, 2. 미스터리라면 설명되지 않는 사건을, 3. 코미디라면 주인공의 독특한 문제 해결 방식을 보여줘야 합니다.작품의 핵심 재미와 무관..
최근 GPT는 기능들을 계속해서 업데이트 중이라 새로운 기능들이 많이 추가되었습니다.그 중에서 프로젝트, 나만의 GPT, ChatGPT Work, Codex에 대해서 알아보겠습니다. ChatGPT 프로젝트: 특정 작업의 자료와 대화를 계속 쌓아가는 작업 공간나만의 GPT(Custom GPT): 특정한 방식으로 반복해서 일하도록 만든 맞춤형 AIChatGPT Work: 조사·분석부터 문서나 사이트 같은 결과물 제작까지 맡기는 작업 모드Codex: 실제 코드·폴더·저장소를 읽고 수정하며 개발 작업을 수행하는 코딩 에이전트구분프로젝트나만의 GPTChatGPT WorkCodex핵심 목적장기 작업의 자료와 대화 내용 관리반복 업무 방식 표준화조사 및 결과물 제작소프트웨어 개발기억 방식프로젝트 안의 대화·파일을 함..
카카오 로그인 설정우선 카카오 계정이 필요합니다.카카오 로그인 준비를 위해서 카카오 디벨로퍼 사이트에 가서 로그인합니다.(카카오 계정으로 로그인됩니다.)https://developers.kakao.com/ Kakao Developers카카오 API를 활용하여 다양한 어플리케이션을 개발해 보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.developers.kakao.com로그인 한 뒤 상단에 앱 메뉴를 누르고 + 앱 생성 버튼을 클릭합니다.필수 입력 정보를 입력한 뒤 저장 버튼을 누르면 앱이 추가됩니다.방금 추가한 앱을 눌러보면 좌측에 메뉴가 나오는데 앱 > 플랫폼 키 메뉴로 들어갑니다.이 중 REST API키는 따로 보관해 둡니다.REST API키 항목 근처에 클라..
이 예제는 Spring Boot 3.5.15 + Java 17 + Spring Security 6 + PostgreSQL + Spring Data JPA + Gradle + Thymeleaf 조합으로 구성합니다.Spring Boot 공식 문서에는 현재 3.5.15가 안정 버전 계열로 제공되고 있으며, Spring Security의 DB 기반 폼 로그인은 UserDetailsService, PasswordEncoder, DaoAuthenticationProvider를 중심으로 동작합니다. 완성되는 기능은 다음과 같습니다.회원가입BCrypt 비밀번호 암호화PostgreSQL 사용자 저장아이디와 비밀번호 로그인사용자·관리자 권한 구분로그인 성공 후 메인 페이지 이동로그인 실패 메시지로그아웃CSRF 보호관리자 ..
Model과 ModelAndView의 차이점특징ModelModelAndView역할뷰에 전달할 데이터(속성)만 담는 역할 (인터페이스)데이터(Model)와 뷰 이름(View)을 모두 담는 컨테이너 (클래스)뷰 지정컨트롤러 메서드의 반환 값(String)으로 뷰 이름을 지정객체 내부의 setViewName() 메서드로 뷰 이름을 지정주요 사용처최근 Spring 개발 트렌드에서 주로 사용 (String 리턴 타입과 함께)Spring 초기에 자주 사용되었으나, 최근에는 사용 빈도가 감소반환 타입컨트롤러 메서드의 파라미터로 받으며, 메서드는 보통 뷰 이름(String)을 반환컨트롤러 메서드의 반환 타입이 됨 ModelModel 객체는 컨트롤러 메서드의 파라미터로 주입받아 사용하며, 데이터를 추가합니다. 메서드는..
MyBatis 와 Spring Data JPA 비교 특징MyBatisSpring Data JPA패러다임SQL 매퍼 (SQL-Centric)ORM (Object-Relational Mapping) (Object-Centric)SQL 관리개발자가 XML이나 어노테이션에 직접 SQL 작성기본적인 CRUD SQL은 프레임워크가 자동 생성개발 속도Mapper와 XML을 모두 작성해야 함Repository 인터페이스 상속만으로 CRUD 완성 (빠름)복잡한 쿼리SQL을 직접 제어하므로 복잡한 조인, 동적 쿼리 작성, 속도 튜닝 등이 용이JPQL이나 QueryDSL을 사용해야 하며, 때로 복잡함영속성 관리SQL 실행 후 결과 매핑만 담당엔티티의 생명주기(조회, 변경 감지, 삭제)를 관리 (영속성 컨텍스트) 안전하게 혼..
@RequestMapping@RequestMapping은 Spring MVC의 어노테이션이며, 특정 URL 요청을 어떤 컨트롤러의 메서드가 처리할지 연결(mapping)해주는 역할을 합니다.예를 들어 @RequestMapping(value="sendMessage")으로 되어있다면 이 메서드가 /sendMessage라는 경로(path)로 들어오는 요청을 처리하겠다는 것을 의미합니다. 예를 들어, 웹 애플리케이션이 http://localhost:8080에서 실행 중이라면, 사용자가 http://localhost:8080/sendMessage로 접속할 때 이 어노테이션이 붙은 메서드가 실행됩니다. 사용 위치:컨트롤러 클래스(class) 레벨이나 메서드(method) 레벨에 붙일 수 있습니다.클래스 레벨에 ..
