AWS Cloud School 13기 9일차

Forever 김·2026년 1월 8일

AWS Cloud School

목록 보기
7/116

오늘도 어김없이 개발의 집중하는 시간을 가졌습니다. 그래서 저는 3주차 과제를 진행했고 하면서 몰랐던점 그리고 팀원들과 소통하면서 알게 된점에 대해서 작성하겠습니다.

알게된 점

  1. REST API 에서 좋아요 등록을 구현하는데 ‘좋아요 등록’은 서버가 토큰으로 구분한다
    1. ‘좋아요’ 기능은 단순한 boolean 상태(true/false)가 아니라 사용자(User)와 게시글(Post) 사이에 형성되는 관계(Relationship)이므로, REST API에서는 이를 하나의 리소스로 보고 생성과 삭제로 표현하는 것이 가장 적절하다.
  2. Query Parameter
    1. 리소스 자체는 그대로 두고 “어떻게 조회할지?” 서버에 전달하는 옵션
    2. 사용하는 판단
      • 같은 리소스를 조회하는데 조건만 바뀌는가?
      • 조회 결과를 정렬/필터/분할해야 하는가?
      • 조회 대상의 “정체성”은 바뀌지 않는가?
    3. 페이지네이션, 정렬, 필터들이 필요할 때 사용된다
  3. Path Parameter
    1. “요청 대상이 되는 리소스를 식별 하기 위한 값” 이다.
    2. 사용하는 판단
      • 같은 리소스를 조회하는데 조건만 바뀌는가?
      • 조회 결과를 정렬/필터/분할해야 하는가?
      • 조회 대상의 “정체성”은 바뀌지 않는가?
    3. 단일 리소스 조회, 하위(종속)리소스 접근 ,수정/삭제 대상 지정
    4. 리소스 정체성 명확화, REST URL은 ‘명사 구조여야함’
  4. HTTP 상태 코드
    1. 200 OK
      1. 요청이 정상적으로 성공
      2. 조회(GET),수정(PATCH/PUT) 성공
    2. 201 CREATE
      1. 새 리소스가 생성될때
    3. 204 NO CONTENT
      1. 요청은 성공
      2. 응답으로 줄 데이터가 없음
    4. 400 BAD REQUEST
      1. 요청 자체가 형식적으로 잘못됨
    5. 401 UNAUTHORIZED
      1. 인증이 안됨
      2. 로그인 안 했거나 토큰이 만료
    6. 403 FORBIDDEN
      1. 인증은 됐지만 권한이 없음
    7. 404 NOT_FOUND
      1. 요청한 리소스가 없음

MVP

: 초기 모델 무조건 이 기능은 있어야한다 (회원가입 : 필수적이니깐 MVP , 프로필 수정 : 꼭필요하진 않으니깐 MVP X)

이력서

  • 이력서에 사진은 엥간하면 넣기
  • 한 페이지가 하나의 캔버스임. 간격이나 기본적인 정렬, 디자인은 신경쓸 것. 그래야 눈에 잘 들어옴.
  • 정량 데이터도 무조건 넣어야 함
    • lampup → 특정 시간마다 특정 트래픽 넣으면서 체크(load test, JMETER, lampup)
  • 가짜 사용자 넣어서 트래픽 넣어보고 어떤 지표를 봐야하고, 어떤식으로 해야하는지는 노션과 사진 참고
  • server 측 지표 → 첫 데이터 메트릭이나 차트로 빼서 기준점 삼고 그 다음 버전이랑 비교해서 정량 데이터 내기
    • network
    • disk
    • ram
    • cpu
    • ram pressure
  • HTTP
    • http request 비교 → 결국은 CDN 이야기가 나올 수 밖에 없음. 이게 가장 편리하니까
  • 정량 데이터를 이력서에 넣으려면 테스트가 필수고, 그 과정에서 굉장히 많은 것들을 선택할 수 있는데 왜 그걸 선택했는지 명확하게 설명할 수 있어야 함
  • 중요한 것만 볼드처리하기
    • 현업자가 일하다가 자세히 보겠니? 키워드 위주로 훑으니까 강조처리 잘하기
  • 깔끔 is 베스트 → 이모지 넣어도 되지만 본질 잘 챙기면 다 부수적인 것.
  • 자세한 설명은 포폴에 넣으면 되니까 이력서 굳이 구구절절 쓰지 말기
  • 면접은 고해성사가 아닌 Show Me The Money다. 내가 뭘 해서 결과를 어떻게 냈는지만 잘 설명하면 됨.

포폴

  • 포폴에는 해설이 많이 넣어줘도 된다.
  • 특히 정량 데이터 넣고, 그거 설명해주는 방식 좋음

파이썬 예외처리

예외처리 구조


try:
    실행 명령문1
    실행 명령문2
    ...
except 에러 종류1:
    예외 처리 명령문1
    예외 처리 명령문2
try:
		# 예외가 발생할 수 있는 코드
		result = 10 / 0
except ZeroDivisionError as e:
		# 특정 예외를 처리
		print(f"0으로 나눌 수 없습니다.")
except Exception as e:
		# 모든 예외를 처리
		print(f"알 수 없는 에러: {e}")
else:
		# 예외가 발생하지 않았을 때만 실행
		print("정상적으로 실행되었습니다.")
finally:
		# 예외 발생 여부와 관계 없이 항상 실행
		print("정리 작업을 수행합니다.")

주요 예외 타입

ValueError : 잘못된 값

TypeError : 잘못된 타입

ZeroDivisionError : 0으로 나누기

FileNotFoundError : 파일이 없음

KeyError : 딕셔너리에 키가 없음

IndexError : 인데스 범위 초과

예외 발생시키기(raise)

def divide(a, b):
	if b == 0:
		raise ValueError("b는 0이 될 수 없습니다.") # b가0이면 ValueError를 일으키고 return은 실행되지 않는다
	return a / b
	
try:
	result = divide(10,0)
except ValueError as e:
	print(f"에러: {e}")

# 출력 : 에러: b는 0이 될 수 없습니다.

오류 무시

# error_pass.py
try:
    # 설정 파일을 읽으려 시도
    f = open("설정파일.txt", 'r')
    config = f.read()
    f.close()
except FileNotFoundError:
    pass  # 설정 파일이 없어도 계속 진행

# 프로그램의 주요 기능은 계속 수행
print("프로그램이 정상적으로 실행됩니다.")

pass를 사용해서 오류가 발생하더라도 프로그램이 중단되지 않고 계속 진행


예외 만들기

파이썬 내장 클래스인 Exception 클래스를 상속하여 만들 수 있다.

class MyError(Exception):
	pass
	
	
def say_nick(nick):
    if nick == '바보':
        raise MyError()
    print(nick)
    
say_nick("천사")
say_nick("바보")

""" 출력:
천사
Traceback (most recent call last):
  File "...", line 11, in <module>
    say_nick("바보")
  File "...", line 7, in say_nick
    raise MyError()
__main__.MyError
"""

예외 처리 기법 사용

try:
	say_nick("천사")
	say_nick("바보")
except MyError:
	print("허용 되지 않는 별명입니다.")
	
"""
천사
허용되지 않는 별명입니다.
"""

2주차 과제 예외 처리 내용

# 예외 처리로 변경
try:
	score = int(input("점수를 입력하세요:"))
	if score < 0 or score > 100:
		raise ValueError
  if score >= 90:
    grade = "A"
  elif score >= 80:
    grade = "B"
  elif score >= 70:
    grade = "C"
  elif score >= 60:
    grade = "D"
  else:
    grade = "F"
  print(grade)
except ValueError:
	print("잘못된 값을 입력하였습니다.")

def calculator(a, b, operator):
    if operator == '+':
        return a + b
    elif operator == '-':
        return a - b
    elif operator == '*':
        return a * b
    elif operator == '/':
        if b == 0:
            raise ZeorDivisionError("0으로 나눌 수 없습니다.")
        return a / b
    else:
        raise ValueError("지원하지 않는 연산자 입니다.")
        
        
 tests = [
    (10, 5, '+'),
    (10, 5, '-'),
    (10, 5, '*'),
    (10, 5, '/'),
    (10, 0, '/'),
    (10, 5, '%')
]

for a, b, op in tests:
    try:
        print(calculator(a, b, op))
    except ZeroDivisionError as e:
        print(e)
    except ValueError as e:
        print(e)

이렇게 과제 진행하면서 몰랐던 점에 대해서 작성해보았습니다. 내일은 10일차인데 휴가라,,, 내일 모레 AWS 워크샵으로 돌아오겠습니다

profile
나를 한줄로

0개의 댓글