전체 글 (68) 썸네일형 리스트형 spring boot 프로젝트 세팅 (with Docker) 1. spring-initializr에서 spring 설정.Project: Gradle-GroovyLanguage: JavaSpring Boot: 3.5.10Packaging: JarConfiguration: YAMLJAVA: 212. 프로젝트 최상단에 docker-compose.yml 작성services: # MySQL db: image: mysql:8.0 container_name: seein-mysql ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_USER: ${MYSQL_US.. 도커(Docekr) 사용 1. Docker를 사용하는 이유호스트 OS의 파일 시스템과 분리된 독립된 공간에서 실행되므로, 로컬 환경을 깨끗하게 유지하고 의존성 문제를 해결할 수 있다.불변 인프라: 환경 차이로 인한 "내 컴퓨터에선 되는데?" 문제를 해결한다.인프라 설정을 파일로 관리하여 버전 관리와 협업이 용이하다.가상 머신(VM)과 달리 커널을 공유하여 가볍고 빠르다. 2. Docker의 동작 방식 Docker Engine: 호스트 OS 위에서 컨테이너가 원활하게 작동하도록 리소스를 제어.컨테이너(Container): 이미지를 실행한 상태. 각 컨테이너는 독립된 프로세스로 동작하며, 호스트 OS의 커널을 공유하되 파일 시스템과 네트워크는 격리된다.이미지(Image): 애플리케이션 실행에 필요한 코드, 런타임, 라이브러리 등을.. JPA 영속성 컨텍스트 영속성 컨텍스트란 엔티티를 영구 저장하는 환경이다.엔티티를 메모리에서 관리하는 일종의 캐시, JPA는 이 영속성 컨텍스트를 통해 엔티티를 관리하고 수정한다. 실제 spring boot 프로젝트 중 "채용 게시판"기능을 JPA로 구현했는데, 실제 코드를 통해 정리했다. @Entity // 이 클래스는 JPA 엔터티. 데이터베이스 테이블과 매핑@Getter@Setterpublic class RecruitmentPostEntity { @Id // 기본 키 @GeneratedValue(strategy = GenerationType.IDENTITY) // 기본키 생성 전략. IDENTITY는 자동 증가 private Long id; private String title; @Column(columnDefinit.. React Hooks Hooks가 필요한 이유React에서 동적인 UI를 구현하기 위해서는 다음과 같은 기능들이 필요하다.사용자 입력에 따른 화면 업데이트데이터 변경 시 자동 화면 갱신외부 API와의 연동컴포넌트 생명주기 관리Hooks는 이러한 기능들을 함수형 컴포넌트에서 구현할 수 있게 한다. 주요 Hooks1. useState - 상태 관리의 기본이 되는 Hookconst [state, setState] = useState(initialValue);역할: 변경되는 값을 저장하고, 그 값이 변경될 때마다 화면을 렌더링사용 시기:사용자 입력 값을 저장할 때 (입력폼)화면에 표시되는 데이터가 변경될 때 (카운터, 토글)서버에서 받아온 데이터를 저장할 때ex) 실시간으로 바뀌는 점수판. 점수가 바뀔 때마다 모두가 볼 수 있게 .. 필드 주입 vs 생성자 주입 1. @Autowired (필드 주입)public class 라면끓이기 { @Autowired private 냄비 냄비; @Autowired private 물 물; @Autowired private 라면 라면;}"냄비, 물, 라면이 있겠거니~" 하고 바로 사용하려는 것. @Controllerpublic class RamyeonController { @Autowired private RamyeonService ramyeonService; // "알아서 있겠지~" 하고 사용} 2. 생성자 주입 방식public class 라면끓이기 { private final 냄비 냄비; private final 물 물; private final 라면 라면; .. JWT토큰 1. 종류Access Token: 실제로 API 접근 권한을 부여하는 토큰. 리소스에 접근할 때 사용Refresh Token: Access Token이 만료됐을 때 새로운 Access Token을 발급받기 위한 토큰 유효기간2. 유효기간Access Token: 짧게 설정 (보통 15분~2시간)Refresh Token: 길게 설정 (보통 7일~30일)3. 저장 위치Access Token: 클라이언트만 저장 (localStorage나 메모리)Refresh Token: 클라이언트와 서버 DB 둘 다 저장 굳이 토큰을 두개로 나누는 이유.보안 강화: Access Token이 탈취되어도 짧은 유효기간 때문에 피해 최소화사용자 경험: Refresh Token으로 자동 재발급하여 잦은 로그인 방지토큰 관리: Ref.. async/await 1. async/await 사용async function getUserData() { const userData = await fetch('url'); console.log(userData); // 서버에서 받아온 실제 데이터}2. async/await 미사용function getUserData() { const userData = fetch('url'); console.log(userData); // Promise { }}두 번째 코드에서는:1. fetch가 데이터를 받아오는 것을 기다리지 않고2. Promise 객체를 바로 userData에 할당하고3. 그 Promise를 바로 출력합니다실생활로 비유하면:- async/await 사용: "피자 배달이 도착할 때까지 기다렸다가 피.. Mac 환경에서 Expo 처음 시작하기 1. Node.js 설치.brew install node 2. 원하는 위치에서 create-expo-app으로 프로젝트 시작.(프로젝트를 시작하는데 있어 도움이 되는 예제 코드가 포함되어있음.)npx create-expo-app@latest 3. 원하는 프로젝트명을 입력하고 설치. 4. 서버 시작.npx expo start 5. 코드 변경.app/(tabs)/index.tsx 파일에서 코드를 변경해본다. 6. 프로젝트 재설정.app폴더에 있는 예제코드들을 app-example로 옮긴 뒤, 새 index.tsx 파일이 있는 app폴더를 다시 만든다.npm run reset-project 이전 1 2 3 4 ··· 9 다음