<aside> 💡 클로저, 프로미스 , 비동기 프로그래밍 ,이벤트 루프, 프로토타입 등 Javascript에 대한 사용 경험으로 문제를 분석하고 해결해내갔습니다.
</aside>
Javascript는 싱글 스레드 즉, 동기언어이다. 동기식으로 작동하기때문에 직렬적으로 진행하게된다. 직렬성은 순차적으로 진행된다는 뜻이고, 현재 어떤 함수가 실행 중이라면 다음 작업은 동기로인해 기다리게된다. 여기서 JS의 async/await 을 사용하요 비동기처리를 하게되면 직렬성이 병렬성으로 바뀌게된다. 코드들은 결과값에 맞게 다른 작업과 상관없이 동작할 수 있다. 이런 점을 기반으로 진행했던 프로젝트 중 미터리움의 비동기 처리에대해서 간략하게 설명해보자.
try {
await loginHashAction(values).then(async (res) => {
if (res) {
await loginAlert(res.name)
saveAuth(res)
await getUserByToken(res?.token)
await loginCookieAction(res?.token)
setCurrentUser(res)
dispatch(await userAction('request', res))
dispatch(await officeAction('request', res))
dispatch(await cooperAction('request', res))
....
}
}
...
이 코드에서는 **res
**라는 응답을 기다린 후, 그 결과에 따라 여러 작업을 순차적으로 실행합니다. 각 단계는 이전 단계가 완료될 때까지 기다렸다가 차례로 진행되며, 이를 통해 복잡한 비동기 로그인 프로세스를 명확하고 관리하기 쉬운 방식으로 처리합니다.
Promise
는 프로미스가 생성된 시점에는 알려지지 않았을 수도 있는 값을 위한 대리자로, 비동기 연산이 종료된 이후에 결과 값과 실패 사유를 처리하기 위한 처리기를 연결할 수 있다. 프로미스를 사용하면 비동기 메서드에서 마치 동기 메서드처럼 값을 반환할 수 있다. 다만 최종 결과를 반환하는 것이 아니고, 미래의 어떤 시점에 결과를 제공하겠다는 '약속'(프로미스)을 반환한다.
const applyBrightnessAndContrast = (
imageData: string,
brightness: number,
contrast: number | string,
rotate: number
) => {
const canvas = document.createElement('canvas')
const context: any = canvas.getContext('2d')
const image = new Image()
return new Promise((resolve, reject) => {
image.onload = () => {
canvas.width = image.width
canvas.height = image.height
context.translate(canvas.width / 2, canvas.height / 2)
// 회전 각도 설정 (단위는 라디안이므로 각도를 라디안으로 변환)
context.rotate((rotate * Math.PI) / 180)
// 원래 위치로 다시 이동
context.translate(-canvas.width / 2, -canvas.height / 2)
context.drawImage(image, 0, 0)
resolve(canvas.toDataURL('image/jpeg'))
}
image.onerror = reject
image.src = imageData
})
}
이 코드는 이미지 데이터를 받아서 새로운 Promise
객체를 생성하고 반환합니다. 이미지는 주어진 밝기, 대비, 회전 값에 따라 처리됩니다. **Promise
**는 비동기 작업이 성공적으로 완료되었을 때 결과를 반환하거나, 오류가 발생했을 때 오류를 반환하는 객체입니다.
실무 프로젝트 및 개인프로젝트를 하면서 부딪히는 문제들을 팀원들과 분석하여 효율적이고 가독성있게 작성하는 작업에 집중하였습니다. 팀원들과 서로 소통하며 서로의 의견을 나누며 문제를 해결해나가 더욱 성장하는 경험을 느꼈습니다.