HANCOM AI ACAMEMY/학습일지 🗒️

[스나이퍼팩토리] 한컴AI아카데미 8주차

c'est sunny 2025. 3. 21.

 

 

이번 주를 돌아보겠음. 비록 주말에 펑펑 잔 카르마로 일요일 일찍 잠들지 못해서 월요일 아침부터 쌓인 피로로 내내 헤롱거리긴 했으나 강의실에서만큼은 집중하려고 노력했다(이에 대한 보상으로 집 가서 밥 먹고 씻고 바로 잠 ㅋ)

아, 이제보니 8주차 목표가 자격증 공부하기였네 아예 안 한 건 아닌데 공부하려고 시동 걸자마자 아마존 내 계정에 뭔 문제가 있어서 그거 해결해달라고 메일을 수요일 오전에 보냈는데 방금 확인해보니 이제야(금요일 오후) 답장왔넹 ... 그래서 못했음 ㅎ 담주에 할거임 아마존 탓임

 

 

이번 주도 뭐 이렇다 할 사진이 없어서 먹은걸로 대체~ 

수요일 간식. 스나이퍼 팩토리 감사합니다 ^^ 

 

다음 달 새로 오신 강사님이 또 아이스크림 사주셨다 이번엔 돼지바 묵음

 

 

월/화/수 오전은 리액트 네이티브 마무리 수업했고 수 오후/목/금은 SQL 배우는 중 리액트에게 미안하지만 SQL이 더 좋고 재밌.....😅 그치만 리액트도 리액트만의 매력이 있으니까(라기 보단 힘들게 배운거 까먹으면....) 주말 쯤에 한번 훑어봐줄게 난 풀스택 능력자가 될거니까~ ㅎㅎ

 

 

리액트는 뭐했냐면 context API, REDUX 어떻게 쓰는지 사용법 배웠다. 근데 REDUX 너무 어려움ㅋ 

그런데 이번 주에 리액트 과제하면서 느낀 거는 내가 리액트 좀 이해했다는 것? 1차로 코드는 지피티한테 짜달라고 했는데 내가 과제를 잘못 이해해서 지피티한테 설명을 잘못햇음 그래서 코드가 약간 꼬였다 근데 이 꼬인 코드를 내가 다 해결함 ㅎㄷㄷ 나 혹시 개발천재?

 

import React, { useState, useEffect, useRef } from "react";
import {
  StyleSheet,
  Text,
  View,
  Image,
  Dimensions,
  TouchableOpacity,
} from "react-native";

const { width } = Dimensions.get("window");

const SwipeScreen = () => {
  const [currentScreen, setCurrentScreen] = useState(0);
  const timerRef = useRef(null);

  const screens = [  배열  ];

  useEffect(() => {
    startScreenTimer();
  }, []);

  const startScreenTimer = () => {
    if (timerRef.current) {
      clearInterval(timerRef.current);
    }
    timerRef.current = setInterval(() => {
      setCurrentScreen((prevScreen) => {
        const nextScreen = (prevScreen + 1) % screens.length;
        return nextScreen;
      });
    }, 3000);
  };

  const handleSkip = () => {
    setCurrentScreen(currentScreen + 1);
    if (currentScreen == 4) {
      setCurrentScreen(0);
    }
  };

  const handleScreenSelect = (index) => {
    setCurrentScreen(index);
    if (timerRef.current) {
      clearInterval(timerRef.current);
    }
    startScreenTimer();
  };

그치만 useRef 나오니까 귀신같이 모르겟당 

바로 학습 드가잣

 

 

react 공식문서에는 이렇게 적혀있음 

useRef is a React Hook that lets you reference a value that’s not needed for rendering.
const ref = useRef(initialValue)
On the next renders, useRef will return the same object. You can change its current property to store information and read it later. This might remind you of state, but there is an important difference.
Changing a ref does not trigger a re-render. This means refs are perfect for storing information that doesn’t affect the visual output of your component. For example, if you need to store an interval ID and retrieve it later, you can put it in a ref. To update the value inside the ref, you need to manually change its current property:

 

긍까 내가 대충 이해를 해보자면, Ref는 값이 바껴도 리렌더링이 되지 않으니까 계속 갖고 싶은 값을 보관할 때 쓰라는 거임

 

그럼 const랑 뭐가 다른거지? const로 저장시 리렌더링 될 때마다 값이 초기화됨

그럼 걍 useState 쓰면 되자나... → state는 값이 바뀔 때마다 리렌더링 됨;;

 

예를 들어 UI가 변경되어야하는 경우, 리렌더링이 되어야하는 게 맞는데, 화면이 바뀌는 게 아니라 걍 단순히 타이머 동작이나 이전 값을 추적하는 일 등에는 리렌더링이 불필요함. 그런 경우 useRef를 쓰라는 거임. 

 

그래도 어렵다...

ㅠㅠ

그니까 setInterval(자바스크립트 내장함수) 때문에 타이머가 여러개 생기는 걸 방지하기 위해 timerRef.current로 관리하는 거라함

근데 암만 지피티 괴롭혀도 왜 꼭 useRef를 써야하는 건지 그냥 setInterval로만 해도 충분하지 않은지에 대한 의문이 시원하게 해결이 안 됨.. 더 읽어봐야겠음..

 

이해가 되면 추가 ㅎㅎ;;

 

<참고 블로그>

 

[ React ] useRef를 알아보자

이 글은 리액트 공식 문서와 이 영상을 참고해서 정리한 글이다. 영상이 아주 잘 정리되어 있어서 보는 것을 강력히 추천한다. (영상제작자에게 허락 받았습니다) 정의 및 특징 우선 공식 문서에

charles098.tistory.com

 

 


 

 

이제 SQL 배우니까 백엔드 시동거는게 느껴진다. 물론 나는 모든 스택 다 커버하는 풀스택 능력자(반복)가 될 거지만 더 선호하는 쪽을 알아두는 건 좋잖아?! 쨌든 나는 내 전문분야 하나는 갖고 싶으니까... 리액트도 뭐 나쁘지 않긴 혀 ?

 

이번 주에는 관계형 모델, 집합, JOIN 연산 정도를 배웠다. 다음 주에는 데이터베이스 설계 보안 쪽을 배울 예정.

초반이라 어렵지는 않았는데 JOIN이 조금 헷갈릴 수 부분이 있으나 수업 중간 중간에 강사님이 실습을 계속 넣어주셔서 이해 완하였다

✨ 강사님 그저 빛 ✨

 

 

SQL : 3월 20일

수업DDL(Data Definition Language) : 데이터 정의 언어- ALTER- DROP DML(Data Manipulation Language) : 데이터 조작 언어- SELECT- INSERT : 새로운 데이터를 테이블에 삽입- UPDATE : 기존 데이터를 수정- DELETE DCL(Data Contro

cest-sunny.tistory.com

 

SQL : 3월 21일

MYSQLCHANGE 사용해서 컬럼명과 변수형 바꾸는 법CHANGE COLUMN 문법ALTER TABLE 테이블명 CHANGE COLUMN 기존컬럼명 새로운컬럼명 새로운데이터타입;예제 1: 컬럼명과 데이터 타입 변경예를 들어, employees 테

cest-sunny.tistory.com

 


[퀴즈]  actor 테이블과 film 테이블을 film_actor 테이블을 통해 조인하여 배우 "PENELOPE GUINESS"가 출연한 모든 영화의 제목을 조회 

USE sakila;    
SELECT * FROM film_actor; SELECT * FROM actor; SELECT * FROM film;
SELECT film.title
	FROM film_actor
	INNER JOIN actor ON actor.actor_id = film_actor.actor_id
	INNER JOIN film ON film.film_id = film_actor.film_id
	WHERE first_name = "PENELOPE" AND last_name = "GUINESS";

 

다른 블로그 예제 보고 푼 문제인데 (SQL이 동작하는데 많은 코드가 필요한 것도 아니라서 최대한 GPT 안 쓰려고 한다)

INNER JOIN이나 JOIN이나 같다는 걸 알았다. 그러면 왜 굳이 INNER JOIN을 쓰는 거지? 정확하게 명시하기 위해서일까 ? 

확실히 실습 반복하면서 내가 직접 코드 쓰니까 머릿속에 입력되는 정보가 많아짐. 

 

강사님이 수업하시면서 실무 경험 특히 강사님께서 신입일 때랑 다른 신입들 이야기를 해주시는데 아찔한 일이 꽤 있었다. 데이터베이스 다루는 직업 까리해서 해보고 싶었는데 요즘은 클라우드 산업이 워낙 크니까 뭐 데이터를 날려먹을 일은 없겠지만 쨌든 나처럼 멋있어보인다고 (물론 시켜준다고도 안했지만) 생각없이 도전했다가는 눈물 줄줄 흘릴 수도 있겠다 싶었음. ㅋㅋ

 

 

그치만 실수 안 하면 그만~

 

 

 

본 후기는 [한글과컴퓨터x한국생산성본부x스나이퍼팩토리] 한컴 AI 아카데미 (B-log) 리뷰로 작성 되었습니다.

댓글